lily-cure 2023-03-31 03:19 采纳率: 81.3%
浏览 9
已结题

关于rest_framework_simplejwt和rest_framework_jwt的区别

在使用jwt令牌的时候 我用了rest_framework_simplejwt

img


但是好像用rest_framework_simplejwt就无法使用以下这种方式生成令牌

img

会产生报错如下

img

这个报错在使用rest_framework_jwt时不会出现
但是我用的是自定义的用户表 所以直接用rest_framework_jwt很麻烦 要搞各种自定义

使用rest_framework_simplejwt 我用postman来发送请求的时候是能够生成token的 那么该怎么用rest_framework_simplejwt在函数中生成token呢??

  • 写回答

1条回答 默认 最新

  • 程序yang 全栈领域优质创作者 2023-03-31 08:39
    关注

    参考下面个例:

    在rest_framework_simplejwt中,生成token需要使用jwt.encode方法,传入负责创建payload的字典和密钥即可。示例如下:

    from rest_framework_simplejwt.tokens import RefreshToken
    
    # 生成token
    def generate_token(user):
        refresh = RefreshToken.for_user(user)
        token = str(refresh.access_token)
        return token
    

    其中RefreshToken.for_user(user)方法可以自动创建并返回一个RefreshToken对象,str(refresh.access_token)则将access_token转为字符串。

    同时,如果你需要自定义payload,可以通过继承rest_framework_simplejwt.tokens.AccessToken或rest_framework_simplejwt.tokens.RefreshToken来自定义,例如:

    from rest_framework_simplejwt.tokens import RefreshToken
    
    class MyToken(RefreshToken):
        def __init__(self, user):
            self.user_id = user.id
            super().__init__(user)
    
        @property
        def payload(self):
            payload = super().payload
            payload['user_id'] = self.user_id
            return payload
    

    这里继承了RefreshToken类,并在__init__方法中添加了一个user_id属性,然后重写了payload属性,在其中加入了自定义的user_id字段。

    然后在视图函数中就可以使用MyToken来生成token了:

    def my_view(request):
        user = authenticate(request)
        token = str(MyToken(user).access_token)
        return Response({'token': token})
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 4月8日
  • 已采纳回答 3月31日
  • 创建了问题 3月31日

悬赏问题

  • ¥15 keil里为什么main.c定义的函数在it.c调用不了
  • ¥50 切换TabTip键盘的输入法
  • ¥15 可否在不同线程中调用封装数据库操作的类
  • ¥15 微带串馈天线阵列每个阵元宽度计算
  • ¥15 keil的map文件中Image component sizes各项意思
  • ¥20 求个正点原子stm32f407开发版的贪吃蛇游戏
  • ¥15 划分vlan后,链路不通了?
  • ¥20 求各位懂行的人,注册表能不能看到usb使用得具体信息,干了什么,传输了什么数据
  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 Centos / PETGEM