Django项目QQ授权登录报错:redirect uri is illegal(100010) 解决方法
Django QQ登录100010错误解决记录
📋 问题描述
错误信息:redirect uri is illegal [appid: 102795886] (100010)
错误场景:Django项目集成QQ授权登录时出现回调地址不合法错误
🔍 问题根本原因
核心冲突
- Django路由惯例:通常在URL模式末尾使用
/
(如:path('qq/callback/', views.qq_callback)
) - QQ互联平台要求:回调地址不能以
/
结尾
具体表现
- Django生成的回调URL:
https://www.pygrow.cn/auth/qq/callback/
⚠️ 有结尾斜杠 - QQ互联平台期望:
https://www.pygrow.cn/auth/qq/callback
✅ 无结尾斜杠 - 结果:两者不匹配导致100010错误
🛠️ 解决方案
步骤1:定位问题文件
文件路径:social_auth/urls.py
步骤2:修改QQ回调路由
# 修改前(有问题的配置)
path('qq/callback/', views.qq_callback, name='qq_callback'),
# 修改后(正确的配置)
path('qq/callback', views.qq_callback, name='qq_callback'), # 去掉结尾的 /
步骤3:完整的修改对比
# social_auth/urls.py
urlpatterns = [
# QQ登录相关URL
path('qq/login/', views.qq_login, name='qq_login'),
- path('qq/callback/', views.qq_callback, name='qq_callback'),
+ path('qq/callback', views.qq_callback, name='qq_callback'), # 去掉结尾的 /
path('qq/register/', views.qq_register, name='qq_register'),
path('qq/bind/', views.qq_bind, name='qq_bind'),
path('qq/unbind/', views.qq_unbind, name='qq_unbind'),
]
✅ 修复后的配置
Django配置
- QQ回调路由:
path('qq/callback', views.qq_callback, name='qq_callback')
- 生成的回调URL:
https://www.pygrow.cn/auth/qq/callback
QQ互联平台配置
- 回调地址设置:
https://www.pygrow.cn/auth/qq/callback
- 注意:确保不要在末尾添加
/
🎯 关键要点
1. 为什么只修改QQ回调路由?
- QQ互联平台:不允许回调地址以
/
结尾 - 其他平台(微信、支付宝等):可能有不同的要求
- 解决策略:只针对有问题的平台进行特定修改
2. 不影响其他功能
# 其他QQ相关URL保持不变
path('qq/login/', views.qq_login, name='qq_login'), # 保持 /
path('qq/register/', views.qq_register, name='qq_register'), # 保持 /
path('qq/bind/', views.qq_bind, name='qq_bind'), # 保持 /
3. 验证修复效果
修复后,Django生成的QQ回调URL将与QQ互联平台要求完全一致:
- ✅ 协议:
https://
- ✅ 域名:
www.pygrow.cn
- ✅ 路径:
/auth/qq/callback
- ✅ 无结尾斜杠
📚 经验总结
易错点
- 忽视结尾斜杠:Django开发者习惯在URL末尾加
/
,容易忽略第三方平台的特殊要求 - 统一配置误区:认为所有社交登录平台都有相同的URL格式要求
- 调试盲区:在检查配置一致性时,容易忽略这种细微差别
最佳实践
- 仔细阅读文档:每个第三方平台都有特定的回调地址格式要求
- 逐一验证:URL配置后要逐字符比对Django生成的URL与平台要求
- 分平台处理:不同社交登录平台可能有不同的URL格式要求,需要分别处理
🔗 相关参考
- QQ互联回调地址常见问题
- Django URL模式文档
- OAuth 2.0 回调地址规范
📅 问题解决时间线
- 问题发现:QQ登录出现100010错误
- 初步排查:检查基本配置(域名、协议等)
- 深入分析:对比Django生成URL与QQ互联要求
- 根因定位:发现结尾斜杠差异
- 方案实施:修改Django URL配置去掉结尾斜杠
- 问题解决:QQ登录正常工作
解决状态:✅ 已解决
修改文件:social_auth/urls.py
关键修改:去掉QQ回调路由的结尾 /
本文地址:https://www.vps345.com/15029.html