Django社交登录Facebook后端state与redirect_uri问题求助
解决Facebook社交登录的Redirect URI白名单与State参数问题
我之前也碰到过几乎一模一样的问题,给你几个实际有效的排查和解决方向:
1. 正确配置REDIRECT_STATE参数
虽然social-core从v1.7.0开始支持关闭state参数,但你需要在Django的settings.py里针对Facebook后端单独配置,而不是只依赖源码默认值。添加这行配置:
SOCIAL_AUTH_FACEBOOK_REDIRECT_STATE = False
全局的REDIRECT_STATE配置可能不会覆盖Facebook后端的单独设置,所以一定要加上SOCIAL_AUTH_FACEBOOK_前缀来指定针对Facebook的规则。
2. 确保Redirect URI完全匹配白名单
注意你跳转时实际使用的redirect URI是https://www.domain.ext/social/complete/facebook/(带www前缀),但你在Facebook后台配置的是https://domain.ext/social/complete/facebook/(不带www)。Facebook的白名单是严格完全匹配的,哪怕是www的差异都会导致报错。
解决方法:在Facebook开发者后台的Valid OAuth Redirect URIs里同时添加两个地址:
https://domain.ext/social/complete/facebook/https://www.domain.ext/social/complete/facebook/
或者统一你的域名使用习惯,让Site URL和实际跳转的redirect URI保持一致(要么都带www,要么都不带)。
3. 清除缓存并重新加载配置
- Facebook开发者后台的配置有时候会有缓存延迟,修改完URI后一定要点击页面右下角的保存更改,然后等待5-10分钟让配置生效。
- 重启你的Django服务器,确保新的settings配置(比如
SOCIAL_AUTH_FACEBOOK_REDIRECT_STATE)被正确加载。
4. 确认social-core版本达标
先检查你当前使用的social-core版本是否真的是v1.7.0及以上:
pip show social-core
如果版本低于1.7.0,执行升级命令:
pip install --upgrade social-core
旧版本确实没有关闭state参数的功能,升级后再配合上面的配置就能生效。
按照这个顺序排查下来,应该就能解决你的问题了。
内容的提问来源于stack exchange,提问作者chidimo
相关产品推荐
相关产品推荐

