Пользовательский Auth-сервер с промежуточным ПО - PullRequest
3 голосов
/ 08 января 2012

Я пытался посмотреть этот ответ , а также использовать сеансы django здесь .

Вход в систему с использованием моей собственной аутентификации работает нормально, но я хочу проверять токен при каждом запросе с промежуточным программным обеспечением, и я не могу понять, как сохранить токен, чтобы к нему можно было получить доступ как из промежуточного программного обеспеченияа также просмотры.

Я пытался сохранить переменную сеанса из своей серверной части аутентификации, но всегда получал бы ключевую ошибку при попытке доступа к ней из моих представлений.

Есть ли хороший способсделать это?

Спасибо!

class MyAuthBackend(object):

    supports_inactive_user = False
    supports_object_permissions = False
    supports_anonymous_user = False

    def authenticate(self, username=None, password=None):
    # This makes a call to my API to varify login, then return token if valid. I need to make login_valid accessible to my middleware and views.
        login_valid = auth.login(username,password)
        if login_valid:
            try:
                user = User.objects.get(username=username)
            except User.DoesNotExist:
                user = User(username=username, password='never_used')
                user.is_active = True
                user.save()
            return user
        return None

    def get_user(self, user_id):
        try:
            return User.objects.get(pk=user_id)
        except User.DoesNotExist:
            return None





class MyAuthMiddleware(object):
    def process_request(self, request):
        if not request.user.is_anonymous():
    # API call to my backend to check if token is still valid. If not, return to login page.
            token_variable = ???????????
            if isTokenStillValid(token_variable):
                return
            else:
            return HttpResponseRedirect('/accounts/login/?next=%s' % request.path)

1 Ответ

0 голосов
/ 08 января 2012

Используете ли вы по умолчанию django.contrib.auth для входа в систему? Кажется, что он полностью очищает сеанс во время процесса входа в систему (что происходит после того, как вызван ваш сервер аутентификации в функции contrib.auth.login, описанной здесь ).

Я думаю, что вы можете либо попытаться написать свой собственный вид входа в систему с альтернативной функцией входа, который сохраняет токен аутентификации, либо сохранить токен где-нибудь еще (таблица базы данных, система кэширования). Последнее может затруднить разрешение нескольких одновременных входов для одного пользователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...