I can generate the token with the route api/token but I can't use it after. All was functional before, but now I have this error from django rest framework, and I don't know why.
File "/home/mathieu/.local/share/virtualenvs/back-aSs_Rzmq/lib/python3.8/site-packages/django/core/handlers/exception.py", line 47, in inner response = get_response(request) File "/home/mathieu/.local/share/virtualenvs/back-aSs_Rzmq/lib/python3.8/site-packages/django/core/handlers/base.py", line 181, in _get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) File "/home/mathieu/.local/share/virtualenvs/back-aSs_Rzmq/lib/python3.8/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view return view_func(*args, **kwargs) File "/home/mathieu/.local/share/virtualenvs/back-aSs_Rzmq/lib/python3.8/site-packages/django/views/generic/base.py", line 69, in view return self.dispatch(request, *args, **kwargs) File "/home/mathieu/.local/share/virtualenvs/back-aSs_Rzmq/lib/python3.8/site-packages/rest_framework/views.py", line 509, in dispatch response = self.handle_exception(exc) File "/home/mathieu/.local/share/virtualenvs/back-aSs_Rzmq/lib/python3.8/site-packages/rest_framework/views.py", line 469, in handle_exception self.raise_uncaught_exception(exc) File "/home/mathieu/.local/share/virtualenvs/back-aSs_Rzmq/lib/python3.8/site-packages/rest_framework/views.py", line 480, in raise_uncaught_exception raise exc File "/home/mathieu/.local/share/virtualenvs/back-aSs_Rzmq/lib/python3.8/site-packages/rest_framework/views.py", line 497, in dispatch self.initial(request, *args, **kwargs) File "/home/mathieu/.local/share/virtualenvs/back-aSs_Rzmq/lib/python3.8/site-packages/rest_framework/views.py", line 414, in initial self.perform_authentication(request) File "/home/mathieu/.local/share/virtualenvs/back-aSs_Rzmq/lib/python3.8/site-packages/rest_framework/views.py", line 324, in perform_authentication request.user File "/home/mathieu/.local/share/virtualenvs/back-aSs_Rzmq/lib/python3.8/site-packages/rest_framework/request.py", line 227, in user self._authenticate() File "/home/mathieu/.local/share/virtualenvs/back-aSs_Rzmq/lib/python3.8/site-packages/rest_framework/request.py", line 380, in _authenticate user_auth_tuple = authenticator.authenticate(self) File "/home/mathieu/.local/share/virtualenvs/back-aSs_Rzmq/lib/python3.8/site-packages/rest_framework_simplejwt/authentication.py", line 40, in authenticate validated_token = self.get_validated_token(raw_token) File "/home/mathieu/.local/share/virtualenvs/back-aSs_Rzmq/lib/python3.8/site-packages/rest_framework_simplejwt/authentication.py", line 94, in get_validated_token return AuthToken(raw_token) File "/home/mathieu/.local/share/virtualenvs/back-aSs_Rzmq/lib/python3.8/site-packages/rest_framework_simplejwt/tokens.py", line 43, in __init__ self.payload = token_backend.decode(token, verify=verify) File "/home/mathieu/.local/share/virtualenvs/back-aSs_Rzmq/lib/python3.8/site-packages/rest_framework_simplejwt/backends.py", line 90, in decode return jwt.decode( TypeError: decode() got an unexpected keyword argument 'verify'
I follow the simple dango rest simple jwt example.
My settings.py
REST_FRAMEWORK = { "DEFAULT_AUTHENTICATION_CLASSES": [ "rest_framework_simplejwt.authentication.JWTAuthentication", ], }
And my views.py
from rest_framework.views import APIView from rest_framework.response import Response from rest_framework.permissions import IsAuthenticated from .models import User from .serializers import UserSerializer, UserRegistrationSerializer from django.http import Http404 from rest_framework import status from django.views.decorators.csrf import csrf_exempt from django.core.exceptions import ObjectDoesNotExist class UserList(APIView): permission_classes = [IsAuthenticated] def get(self): users = User.objects.all().exclude(is_staff=True).order_by("id") serializer = UserSerializer(users, many=True) return Response(serializer.data) def post(self, request): serializer = UserRegistrationSerializer(data=request.data) if serializer.is_valid(): serializer.save() return Response(serializer.data, status=status.HTTP_201_CREATED) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) class UserDetail(APIView): permission_classes = [IsAuthenticated] @csrf_exempt def get_object(self, pk): try: return User.objects.get(pk=pk) except ObjectDoesNotExist: raise Http404 @csrf_exempt def get(self, request, pk): user = self.get_object(pk=pk) serializer = UserSerializer(user) return Response(serializer.data) @csrf_exempt def put(self, request, pk): user = self.get_object(pk) serializer = UserSerializer(user, data=request.data, partial=True) if serializer.is_valid(): serializer.save() return Response(serializer.data) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) @csrf_exempt def patch(self, request, pk): user = self.get_object(pk) serializer = UserSerializer(user, data=request.data, partial=True) if serializer.is_valid(): serializer.save() return Response(serializer.data) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) @csrf_exempt def delete(self, request, pk): user = self.get_object(pk) user.delete() return Response(status=status.HTTP_204_NO_CONTENT)
Looks like the problem is straight from the django-rest-framework module or maybe my os with ssl problem.
Fixed the issue with PyJWT==2.1.0 and djangorestframework-simplejwt==4.8.0 in the requirements.txt:
PyJWT==2.1.0 djangorestframework-simplejwt==4.8.0
It may be noted that PyJWT 2.2.0 (Released: Oct 7, 2021) is causing the error. So pinning PyJWT<2.2 or alternatively PyJWT==2.1.0 in personal projects is a workaround for now, but ideally this would be either pinned appropriately here:
https://github.com/jazzband/djangorestframework-simplejwt/blob/master/setup.py#L59
or handled in source code.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With