Ошибка в пользовательском обновлении JWT-токена Django

#django #django-rest-framework #jwt-auth #django-rest-framework-simplejwt

#django #django-rest-framework #jwt-auth #django-rest-framework-simplejwt

Вопрос:

Я использовал simpleJWT в Django. Вход в систему работает нормально, однако я хочу реализовать представление для текущего обновления. Итак, я получаю в теле запроса токены доступа и обновления, я проверяю, действителен ли токен доступа, и если его нет, я создаю новый.

Однако эта реализация, похоже, не работает. (тестирование с помощью postman с заданными токенами, которые он запрашивает для сведений о пользователях)

serializers.py

 class RefreshSerializer(serializers.Serializer):
    accessToken = serializers.CharField(max_length=255, required=True)
    refreshToken = serializers.CharField(max_length=255, required=True)
 

views.py

 class TokenRefreshView(APIView):
    permission_classes = ()
    authentication_classes = ()

    def post(self, request):
        received_json_data = request.data
        serializer = RefreshSerializer(data=received_json_data)
        if serializer.is_valid():
            accessToken = received_json_data['accessToken']
            refreshToken = received_json_data['refreshToken']
            if (rest_framework_simplejwt.views.token_verify(accessToken).status_code != 200):
                user = rest_framework_simplejwt.authentication.JWTAuthentication.get_user(accessToken)
                refresh = RefreshToken.for_user(user)
                newaccesstoken = str(refresh.access_token)
                return JsonResponse({
                    'accessToken': newaccesstoken
                }, status=200)
            else:
                return JsonResponse({
                    'message': 'Token still valid',
                }, status=403)
        else:
            return JsonResponse({'message': serializer.errors}, status=400)
 

Комментарии:

1. почему вы это делаете? в django-rest-framework-simplejwt эта функция уже есть

2. В документации simplejwt вы можете найти пример того, как использовать маршрут обновления по умолчанию без необходимости его повторной реализации: django-rest-framework-simplejwt.readthedocs.io/en/latest /…

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

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