DRF 使用 simpleJWT登陆认证(二)自定义token返回和获取token中的payload

7 篇文章 2 订阅

上篇文件整理下基本的使用,默认响应返回只有 access和refresh这2个字段,如果需要其他字段,则需要自定义序列化类。

1、自定义序列化类,继承TokenObtainPairSerializer

class MyTokenSerializer(TokenObtainPairSerializer):

    @classmethod
    def get_token(cls, user):
        """
        此方法往token的有效负载 payload 里面添加数据
        若自定义了用户表,可以在这里面添加用户邮箱,性别,年龄等可以公开的信息
        这部分放在token里面是可以被解析的,所以不要放比较私密的信息
        :param user: 用戶信息
        :return: token
        """
        token = super().get_token(user)
        # 添加个人信息
        token['name'] = user.username
        token['mobile'] = user.mobile
        return token
        
    def validate(self, attrs):
        '''此方法是 响应数据结构,默认返回只有 access 和 refresh'''
        data = super().validate(attrs=attrs)
        # 获取Token对象
        refresh = self.get_token(self.user)
        data["refresh"] = str(refresh)
        data["access"] = str(refresh.access_token)
        # 令牌到期时间
        data['expire'] = refresh.access_token.payload['exp']  # 有效期
        # 用户名
        data['username'] = self.user.username
        # 手机号
        data['mobile'] = self.user.mobile
        return data
        

2、配置路由

urlpatterns = [
	# 验证返回自定义数据url
    path('login2/', views.Login2View.as_view()),
    # 验证解析paylod数据url
    path('test/', views.Test.as_view()),
]

3、配置视图

from rest_framework_simplejwt.views import TokenViewBase, TokenObtainPairView
from vueshop.my_token_serializer import MyTokenSerializer

class Login2View(TokenObtainPairView):
    # 引用上面自定义的序列化类
    serializer_class = MyTokenSerializer
    
class Test(APIView):
    # permission_classes = []
    def get(self, request):
        print(request.auth.payload)
        return Response('aa')

4、验证

结果显示
参照上面代码,自行定义自己需要的数据和格式

{
'token_type': 'access', 
'exp': 1652948487, 
'iat': 1652862087, 
'jti': '40b600b04fcd4ee9808d05d1f932bbef', 
'user_id': 1, 
'name': 'admin', 
'mobile': '19856226325'
}

可以根据request.auth.payload获取访问的用户的相关信息,因为是可以解密的,故不要放私密信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值