我正在使用 Django Rest Framework 和 django-rest-framework-simplejwt 进行身份验证。正在发送的数据正在被 React 消耗。
到目前为止,我已经能够TokenObtainPairSerializer
在登录/获取新令牌时对 进行子类化以返回用户名和 ID。
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
我正在尝试在刷新令牌时返回用户用户名和 ID。但是,这不起作用:
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
在这里,用户名总是作为空字符串返回,ID 总是作为 null 返回。
我尝试了许多不同的方法,包括尝试在视图本身中更新此信息,但似乎无法使其正常工作。我注意到TokenRefreshSerializer
子类serializers.Serializer
,而 TokenObtainPairSerializer 子类TokenObtainSerializer
本身使用 Django 身份验证对用户进行身份验证。这似乎需要密码(例如用户登录时),但显然在刷新令牌时不会提供密码。
我的问题是,刷新令牌时如何返回有关当前用户的用户名和 ID(或任何任意信息)?
接下来的问题是,当用户首次登录时简单地将这些信息保存到前端的 localStorage 并让状态在每次后续访问时重新填充该数据(直到用户注销,或者刷新令牌不再有效)?
请注意:这不是类似问题的转贴,因为我的目标是令牌的刷新。最初TokenObtainPairView
的子类和实现很简单。