Django Request MiddleWare не вступает в силу - PullRequest
0 голосов
/ 24 января 2019

Я работаю над решением, которое использует токен JWT, находит связанного пользователя и настраивает пользователя в запросе для найденного пользователя с токеном.Мое промежуточное ПО выглядит так:

class UserTokenMiddleware(object):

    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):

        header_token = request.META.get('HTTP_AUTHORIZATION', None)

        if header_token is not None:
          try:

            token = request.META.get('HTTP_AUTHORIZATION', " ").split(' ')[1]
            data = {'token': token}
            valid_data = VerifyJSONWebTokenSerializer().validate(data)
            user = valid_data['user']
            request.user = user

          except Token.DoesNotExist:
            pass

        print(request.user.auth_token);
        return self.get_response(request)

И это работает!Auth_token присутствует!И он добавлен внизу моего промежуточного программного обеспечения примерно так:

MIDDLEWARE = [
    #Added Last
    "app.middleware.UserTokenMiddleware"
]

Теперь здесь, где не работает.Я пытаюсь выйти по удаленному токену, и мне нужен ключ.Итак, у меня есть это:

@action( url_path="logout", detail=False, methods=["get"], renderer_classes=[JSONRenderer])
    def endsession(self, request):
        result = logout(request)
        #request.user.auth_token.delete()
        print("Auth Token") 
        print(request.user.auth_token);
        print(result)
        return Response({"logout": "successful"})

За исключением того, что я всегда получаю следующую ошибку:

Exception Type: AttributeError at /v1/users/logout
Exception Value: 'AnonymousUser' object has no attribute 'auth_token'

Любая подсказка о том, почему auth_token внезапно исчезает и возвращается к AnonymousUser?

1 Ответ

0 голосов
/ 24 января 2019

Потому что вы звоните logout в начале просмотра; который специально устанавливает для пользователя анонимность.

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