添加社交认证后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
相关产品推荐
相关产品推荐

