Django SimpleJWT

Я использую django-simplejwt и у меня есть пользовательское представление токена для получения токена. Моя проблема в том, как я могу переопределить ответ 401 Unauthorized из представления?

https://django-rest-framework-simplejwt.readthedocs.io/en/latest/customizing_token_claims.html

from rest_framework_simplejwt.serializers import TokenObtainPairSerializer
from rest_framework_simplejwt.views import TokenObtainPairView

class ObtainTokenSerializer(TokenObtainPairSerializer):
    @classmethod
    def get_token(cls, user):
        token = super().get_token(user)


        # Add custom claims
        token['name'] = user.first_name
        # ...

        return token

class ObtainToken(TokenObtainPairView):
    serializer_class = ObtainTokenSerializer

enter image description here

Ответ может находиться в поднятом исключении.

Погружаясь в пакет simplejwt, вы увидите что-то вроде следующего :

class InvalidToken(AuthenticationFailed):
    status_code = status.HTTP_401_UNAUTHORIZED
    default_detail = _('Token is invalid or expired')
    default_code = 'token_not_valid'

Вот откуда берется 401, который вы видите.

Поэтому ваш класс ObtainToken должен переопределить метод post из материнского класса TokenViewBase с помощью вашего конкретного Exception или Response.

Например :

from rest_framework import status
...

class ObtainToken(TokenObtainPairView):
    serializer_class = ObtainTokenSerializer
    ...
    def post(self, request):
        ...
        return Response(status=status.HTTP_404)

Хотя выше приведен только пример, вы должны реализовать что-то похожее на метод post из TokenViewBase, но с настроенными вами статусом и данными.

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