You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

添加社交认证后django-restframework-simplejwt生成的Token无效报DecodeError

问题根因

你遇到的jwt.exceptions.DecodeError报错本质是JWT解码时参数不匹配导致的,触发原因是新增社交认证依赖时带来的PyJWT版本变动、解码参数缺失,和你新增的AUTHENTICATION_BACKENDS配置本身没有直接关联。

解决方案
  • 方案1:补全jwt.decode的算法参数
    PyJWT v2.0及以上版本强制要求显式指定解码算法,新增社交认证依赖时大概率将PyJWT从1.x升级到了2.x版本,之前省略algorithms参数的写法就会失效。
    直接修改VerifyEmail类里的解码代码即可:

    payload = jwt.decode(token, settings.SECRET_KEY, algorithms=["HS256"])
    
  • 方案2:使用simplejwt自带的token解析方法(更推荐)
    你生成token用的是djangorestframework-simplejwt提供的RefreshToken类,解码时直接用配套的AccessToken类解析即可,无需手动调用底层jwt.decode,会自动适配框架的JWT配置,后续修改JWT相关配置也不用调整解码逻辑:
    先导入依赖:

    from rest_framework_simplejwt.tokens import AccessToken
    

    替换原有解码逻辑:

    token = request.GET.get('token')
    try:
        payload = AccessToken(token)
        user = User.objects.filter(id=payload['user_id']).first()
        # 后续校验、修改用户状态的逻辑保持不变
    
  • 方案3:排查依赖版本冲突
    执行以下命令检查依赖版本兼容性,确保social-auth-core和djangorestframework-simplejwt依赖的PyJWT版本没有冲突,如果存在冲突安装兼容的PyJWT版本即可:

    pip show PyJWT djangorestframework-simplejwt social-auth-core
    

内容的提问来源于stack exchange,提问作者Abinash Karki

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 10:36:00