Как добавить Authenticate Middleware JWT django REST?

Я новичок в использовании Django и REST. И в моем проекте мне нужно добавить пользовательский JWT auth. Я пытался сгенерировать его следующим образом внутри модели User:

class User(AbstractUser):
....
    def _generate_jwt_token(self):
    dt = datetime.datetime.now() + datetime.timedelta(days=60)

    token = jwt.encode({
        'id': self.pk,
        'exp': int(dt.strftime('%s'))
    }, settings.SECRET_KEY, algorithm='HS256')

    return token.encode("windows-1252").decode("utf-8")

В моих представлениях это так

class LoginAPIView(APIView):

def post(self, request):
     ...
    response = Response()

    response.set_cookie(key="jwt", value=user.token, httponly=True)
     ...
    return response

И

class CurrentUserAPIView(APIView):

def get(self, request):
    token = request.COOKIES.get('jwt')

    if not token:
        raise AuthenticationFailed('This user is unauthenticated')

    try:
        payload = jwt.decode(token, settings.SECRET_KEY, algorithms=['HS256'])
    except:
        msg = 'Invalid authentication. Could not decode token.'
        raise AuthenticationFailed(msg)

    try:
        user = User.objects.get(pk=payload['id'])
    except User.DoesNotExist:
        msg = 'No user matching this token was found.'
        raise AuthenticationFailed(msg)

    serializer = UserSerializer(user)

    return Response(serializer.data, status=status.HTTP_200_OK)

Но я думаю, что эта логика должна быть внутри промежуточного ПО. Не могли бы вы дать мне совет, как я могу переписать этот код. Большое спасибо!

Вернуться на верх