DRF应用集成Google OAuth登录时触发Invalid token type错误
解决all-auth + dj-rest-auth Google OAuth登录的Token解码错误
问题描述
在DRF(Django REST Framework)应用中基于all-auth和dj-rest-auth实现的Google OAuth登录功能突然失效,抛出以下错误:
raise DecodeError(f"Invalid token type. Token must be a {bytes}")
回溯信息显示错误出现在JWT处理环节,尝试参考教程重新操作也无法复现问题。
可能的排查与解决方向
- 检查Token传递与类型:确认前端传入的Google ID Token是否为原始字符串,是否在传递过程中被意外处理成非bytes类型。all-auth解码时要求token为bytes,若前端传的是字符串,可在后端处理时先转码:
token.encode('utf-8')。 - 排查依赖版本冲突:查看django-allauth、dj-rest-auth及相关JWT依赖(如djangorestframework-simplejwt)的版本兼容性。部分版本更新会修改token处理逻辑,可尝试锁定到之前正常工作的版本组合,例如:
django-allauth==0.54.0 dj-rest-auth==2.2.7 djangorestframework-simplejwt==5.2.2 - 核对JWT配置:检查项目settings.py中的JWT相关配置,比如
SIMPLE_JWT下的AUTH_HEADER_TYPES是否设置为('Bearer',),避免因token前缀错误导致解码失败。 - 验证Google OAuth应用配置:确认Google Cloud Console中的客户端ID、密钥是否正确,授权回调地址与项目配置一致,且已开启必要的API(如Google Identity API)。
- 调试解码流程:在all-auth的token解码相关代码中添加日志,打印传入token的类型和内容,定位是否为输入数据不符合预期导致的错误。
内容的提问来源于stack exchange,提问作者Matheus Lopes
相关产品推荐
相关产品推荐

