Как добавить пользовательское поле при проверке маркера доступа в rest_framework_simplejwt

Я попытался переопределить метод validate в TokenVerifySerializer, но это вызывает ошибку AttributeError.

from rest_framework_simplejwt.serializers import TokenVerifySerializer
from rest_framework_simplejwt.views import TokenVerifyView

class CustomTokenVerifySerializer(TokenVerifySerializer):
    def validate(self, attrs):
        data = super(CustomTokenVerifySerializer, self).validate(attrs)
        data.update({'fullname': self.user.fullname})
        return data


class CustomTokenVerifyView(TokenVerifyView):
    serializer_class = CustomTokenVerifySerializer

Но это работает при использовании TokenObtainPairSerializer и TokenObtainPairView. Приведенный выше фрагмент вызывает ошибку AttributeError с 'CustomTokenVerifySerializer' object has no attribute 'user'.

Способ добавления пользовательских полей в данные, я думаю, правильный. Проблема заключается в self.user.fullname. Потому что в сериализаторе нет поля user. Если вам нужна информация о пользователе в сериализаторе, вы должны получить пользователя из БД.

Но в данном случае, я думаю, вам нужен текущий пользователь или аутентифицированный пользователь. Чтобы получить аутентифицированного пользователя в сериализаторе, вам нужно передать объект user или request в качестве контекста в сериализатор. Вот пример:

def validate(self, attrs):
    request = self.context.get('request', None)
    if request:
        user = request.user

И вы должны инициализировать сериализатор, как показано ниже:

serializer = MySerializer(
    data=request.data,
    context={
        'request': request
    }
)
Вернуться на верх