FON*_*TIN 1 authentication django django-rest-framework django-rest-framework-simplejwt
我正在使用 django_rest_passwordreset 在 Django Rest 框架上进行身份验证。
我按照他们官方文档上的教程进行操作并登录,注册效果很好。
登录返回访问和刷新令牌。我想做的还包括返回用户对象以及访问和刷新令牌。
我有一个定制模型
# auth/models.py
# Inherited from user
class MUser(AbstractUser, models.Model):
email = models.EmailField(unique=True)
role = models.CharField(max_length=40, default="student")
USERNAME_FIELD = 'email'
EMAIL_FIELD = 'email'
REQUIRED_FIELDS = ['username', 'role']
Run Code Online (Sandbox Code Playgroud)
序列化器
# auth/serializers.py
class TokenObtainPairSerializer(TokenObtainSerializer):
@classmethod
def get_token(cls, user):
return RefreshToken.for_user(user)
def validate(self, attrs):
data = super().validate(attrs)
refresh = self.get_token(self.user)
data['refresh'] = str(refresh)
data['access'] = str(refresh.access_token)
if api_settings.UPDATE_LAST_LOGIN:
update_last_login(None, self.user)
return data
Run Code Online (Sandbox Code Playgroud)
我的看法
# auth/views.py
class TokenObtainPairView(TokenViewBase):
"""
Takes a set of user credentials and returns access and refresh JSON web
token pair to prove the authentication of those credentials.
"""
serializer_class = serializers.TokenObtainPairSerializer
Run Code Online (Sandbox Code Playgroud)
总之,成功登录后,我收到
{
access: xxx,
refresh: xxx,
# I want to add this
user: {username, first_name, last_name, email, ...}
}
Run Code Online (Sandbox Code Playgroud)
我想这可能对你有帮助:
def validate(self, attrs):
data = super().validate(attrs)
refresh = self.get_token(self.user)
data['refresh'] = str(refresh)
data['access'] = str(refresh.access_token)
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
my_user = User.objects.filter(pk=self.user.id).first()
if my_user:
# use user serelizor or parse required fields
data['user'] = my_user
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
if api_settings.UPDATE_LAST_LOGIN:
update_last_login(None, self.user)
return data
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1982 次 |
| 最近记录: |