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
Ответ может находиться в поднятом исключении.
Погружаясь в пакет 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
, но с настроенными вами статусом и данными.