Я использую Django Rest Framework и django -rest-framework-simplejwt для аутентификации. Отправляемые данные потребляются реагированием.
До сих пор мне удавалось создать подкласс TokenObtainPairSerializer
для возврата имени пользователя и идентификатора при входе в систему / получении нового токена.
class MyTokenObtainPairSerializer(TokenObtainPairSerializer):
def validate(self, attrs):
data = super(MyTokenObtainPairSerializer, self).validate(attrs)
data.update({'user': self.user.username})
data.update({'id': self.user.id})
return data
Я пытаюсь вернуть имя пользователя и идентификатор пользователя при обновлении токена. Это, однако, не работает:
class MyTokenRefreshSerializer(TokenRefreshSerializer):
def validate(self, attrs):
data = super(MyTokenRefreshSerializer, self).validate(attrs)
user = self.context['request'].user
data.update({'user': user.username})
data.update({'id': user.id})
return data
Здесь имя пользователя всегда возвращается как пустая строка, а идентификатор всегда возвращается как ноль.
Я пробовал много разных способов в том числе пытаясь обновить эту информацию в самом представлении, но не могу заставить ее работать. Я заметил, что TokenRefreshSerializer
подклассы serializers.Serializer
, в то время как TokenObtainPairSerializer подклассы TokenObtainSerializer
, который сам аутентифицирует пользователя, используя Django аутентификацию. По-видимому, для этого требуется пароль (например, когда пользователь входит в систему), но, очевидно, он не будет предоставлен при простом обновлении токена.
У меня вопрос, как я могу вернуть имя пользователя и идентификатор (или любой произвольный информация) о текущем пользователе при обновлении токена?
Последующим вопросом будет, будет ли практичнее просто сохранять эту информацию в localStorage на внешнем интерфейсе, когда пользователь впервые входит в систему и получает состояние повторно заполнять эти данные при каждом последующем посещении (до тех пор, пока пользователь не выйдет из системы или токен refre sh больше не действителен)?
Обратите внимание : это не репост из подобных вопросов, таких как , этот , потому что я нацеливаюсь на ОБНОВЛЕНИЕ токенов. Начальный TokenObtainPairView
был простым для подкласса и реализации.