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生成的回调URLhttps://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')
  • 生成的回调URLhttps://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
  • ✅ 无结尾斜杠

经验总结

易错点

  1. 忽视结尾斜杠:Django开发者习惯在URL末尾加 /,容易忽略第三方平台的特殊要求
  2. 统一配置误区:认为所有社交登录平台都有相同的URL格式要求
  3. 调试盲区:在检查配置一致性时,容易忽略这种细微差别

最佳实践

  1. 仔细阅读文档:每个第三方平台都有特定的回调地址格式要求
  2. 逐一验证:URL配置后要逐字符比对Django生成的URL与平台要求
  3. 分平台处理:不同社交登录平台可能有不同的URL格式要求,需要分别处理

相关参考

  • QQ互联回调地址常见问题
  • Django URL模式文档
  • OAuth 2.0 回调地址规范

问题解决时间线

  1. 问题发现:QQ登录出现100010错误
  2. 初步排查:检查基本配置(域名、协议等)
  3. 深入分析:对比Django生成URL与QQ互联要求
  4. 根因定位:发现结尾斜杠差异
  5. 方案实施:修改Django URL配置去掉结尾斜杠
  6. 问题解决:QQ登录正常工作

解决状态:✅ 已解决
修改文件social_auth/urls.py
关键修改:去掉QQ回调路由的结尾 /

你可能感兴趣的:(django,sqlite,数据库)