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 网络设备配置与管理这个该怎么弄
  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器