Токен, сгенерированный django-restframework-simplejwt недействителен

#django #django-rest-framework #django-rest-framework-simplejwt

Вопрос:

Это прекрасно работало до того, как я попытался добавить социальную аутентификацию в проект, и теперь, когда я отправляю электронное письмо с подтверждением с помощью токена, верификатор токена говорит, что токен недействителен!

 class ResendVerifyEmail(APIView):
    serializer_class = RegisterSerialzer
    def post(self, request):
        data = request.data
        # email = data.get('email')
        email = data['email']
        print(email)
        try:
            user = User.objects.get(email=email)
            # print('hello')
            if user.is_verified:
                return Response({'msg':'User is already verified','status':'status.HTTP_400_BAD_REQUEST'})
            print (user.username)
            token = RefreshToken.for_user(user).access_token
            current_site= get_current_site(request).domain
            relativeLink = reverse('email-verify')
            
            absurl = 'http://' current_site relativeLink "?token=" str(token)
            email_body = 'Hi '  user.username   ' this is the resent link to verify your email n'   absurl

            data = {'email_body':email_body,'to_email':user.email,
                    'email_subject':'Verify your email'}
            Util.send_email(data)
            return Response({'msg':'The verification email has been sent','status':'status.HTTP_201_CREATED'}, status=status.HTTP_201_CREATED)
        except User.DoesNotExist:
            return Response({'msg':'No such user, register first','status':'status.HTTP_400_BAD_REQUEST'})


class VerifyEmail(APIView):
    serializer_class = EmailVerificationSerializer
    def get(self, request):
        token = request.GET.get('token')
        try:
            payload = jwt.decode(token, settings.SECRET_KEY)
            # print('decoded')
            user = User.objects.filter(id=payload['user_id']).first()
            # print(user)
            if user.is_verified:
                return Response({'msg':'User already verified!'}, status=status.HTTP_400_BAD_REQUEST)
            else:
                user.is_verified = True
                # user.is_authenticated = True
                user.is_active = True
                # if not user.is_verified:
                user.save()
                return Response({'email':'successfuly activated','status':'status.HTTP_200_OK'}, status=status.HTTP_200_OK)
        # except jwt.ExpiredSignatureError as identifier:
        except jwt.ExpiredSignatureError:
            return Response({'error':'Activation Expired','status':'status.HTTP_400_BAD_REQUEST'}, status=status.HTTP_400_BAD_REQUEST)
        # except jwt.exceptions.DecodeError as identifier:
        except jwt.exceptions.DecodeError:
            return Response({'error':'invalid token','status':'status.HTTP_400_BAD_REQUEST'}, status=status.HTTP_400_BAD_REQUEST)
 

кроме того, я добавил их в settings.py

 AUTHENTICATION_BACKENDS = (
    'social_core.backends.facebook.FacebookOAuth2',
    'django.contrib.auth.backends.ModelBackend',
)
 

Я получаю jwt.исключения.Ошибка декодирования’

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

1. Я бы настоятельно рекомендовал использовать выделенное промежуточное программное обеспечение для авторизации JWT. Он будет обрабатывать маркер декодирования для вас.

Ответ №1:

Это сделало свое дело

 payload = jwt.decode(token, settings.SECRET_KEY, algorithms='HS256')