Как добавить пользовательское поле при проверке маркера доступа в 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
}
)