Уведомления

Группа в Telegram: @pythonsu

#1 Июль 2, 2012 19:45:58

pyOut
От:
Зарегистрирован: 2006-07-16
Сообщения: 125
Репутация: +  0  -
Профиль   Отправить e-mail  

Django auth

Написал следующий код для авторизации пользователей по определенному hash:

class UserAuthMiddleware(object):
    def process_request(self, request):
        if 'auth_hash' in request.GET:
            auth_hash = request.GET['auth_hash']
            try:
                data = signing.loads(auth_hash, max_age=7*24*60*60)
            except signing.BadSignature:
                data = {}
            if data:
                try:
                    user = User.objects.get(username=data['username'])
                except User.DoesNotExist:
                    user = None
                if user:
                    user.backend = 'core.backend.Backend' 
                    login(request, user)

Но вся беда в том что страница открывается лишь та на которой указан GET параметр auth_hash, при переходе на другие страницы требует авторизации. Что я делаю не так и что нужно поправить?



Офлайн

#2 Июль 2, 2012 21:44:43

slav0nic
Команда
От: dp.ua
Зарегистрирован: 2006-05-07
Сообщения: 2260
Репутация: +  41  -
Профиль   Отправить e-mail  

Django auth

лень проверять, а если request.user = user добавить выше login?

юзать токены в GET небезопасно если они не одноразовые ;)

+ из доки:

When you're manually logging a user in, you must call authenticate() before you call login().

ну и таким вещам наверно место в AuthBackend, а не мидлваре, по дефолту который “django.contrib.auth.backends.ModelBackend” или ты свою юзаешь?

Отредактировано slav0nic (Июль 2, 2012 21:48:36)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version