Ошибка токена JWT "Token has no id" Django Rest Framework

  • Я пытаюсь получить доступ к данным (user_id) из пользовательского токена simple jwt.
  • Но я получаю эту ошибку. "message": "Token has no id"
{
    "detail": "Given token not valid for any token type",
    "code": "token_not_valid",
    "messages": [
        {
            "token_class": "AccessToken",
            "token_type": "access",
            "message": "Token has no id"
        }
    ]
}
  • это мой jwt_custom.py
def generate_access_token(user):

    access_token_payload = {
        'user_id': user.id,
        'exp': datetime.datetime.utcnow() + datetime.timedelta(days=0, minutes=20),
        'iat': datetime.datetime.utcnow(),
    }
    access_token = jwt.encode(access_token_payload, settings.SECRET_KEY, algorithm='HS256')
    return access_token


def generate_refresh_token(user):
    refresh_token_payload = {
        'user_id': user.id,
        'exp': datetime.datetime.utcnow() + datetime.timedelta(days=7),
        'iat': datetime.datetime.utcnow()
    }
    refresh_token = jwt.encode(
        refresh_token_payload, settings.SECRET_KEY, algorithm='HS256')

    return refresh_token
  • это мой views.py здесь я создаю токен, когда пользователь входит в систему.
@permission_classes([AllowAny])
class LoginView(APIView):
    serializer_class = LoginSerializer

    def post(self, request, **kwargs):
        serializer = self.serializer_class(data=request.data)
        ...
           generate_access_token = jwt_custom.generate_access_token(user)
           generate_refresh_token = jwt_custom.generate_refresh_token(user)
           return Response({"response": True, "return_code": "login_success",'refresh': str(generate_access_token), 'access': str(generate_refresh_token), "result": {"user": user_serializer.data}, "message": success["login_success"]},  status=200)
        ...
  • это views.py здесь я пытаюсь получить данные через токен.
class UserPosts(APIView):
    
    def post(self, request, user_id=None, *args, **kwargs):

        get_token = request.META.get('Authorization', None)
        
        try:
            payload = jwt.decode(get_token, settings.SECRET_KEY, algorithms=['HS256']).decode('utf-8')
        except jwt.ExpiredSignatureError:
            return Response({'expired refresh token, please login again.': "notFound"})

        get_user_data = request.data["user_id"]
                
        try:
            User.objects.get(id=user_id)
            post = Post.objects.filter(user_id=payload.get('user_id')).order_by('-created_on')
            paginator = CustomPageNumberPagination()
            page = paginator.paginate_queryset(post, request)
        ...
  • Я не могу найти проблему.

Попробуйте установить следующее в настройках.

SIMPLE_JWT = {
'USER_ID_FIELD': 'user_id'
}
Вернуться на верх