You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django集成Facebook登录报AuthCanceled错误,SOCIAL_AUTH_REDIRECT_IS_HTTPS无效如何解决

问题根因

从报错日志可以确认,调用Facebook换取access_token的接口时,提交的redirect_uri参数仍然是HTTP协议的地址,和你在Facebook开发者后台配置的HTTPS回调地址不匹配,所以Facebook返回400错误,最终触发AuthCanceled异常。你配置的SOCIAL_AUTH_REDIRECT_IS_HTTPS未生效,通常是因为Django部署在反向代理(Nginx/Apache/CDN等)后,无法识别外层的HTTPS请求导致的。

解决方案

按以下步骤配置即可解决:

  • 首先在Django的settings.py中添加代理SSL头识别配置,让Django可以识别外层的HTTPS请求:
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
# 确保允许你的域名作为请求Host
ALLOWED_HOSTS = ['www.example.com', 'example.com']
  • 如果你使用Nginx作为反向代理,需要在对应站点的配置块中添加请求头传递规则,确保协议头可以正常传递给Django服务:
server {
    # 其它配置省略
    location / {
        proxy_pass http://你的Django服务监听地址;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-For $remote_addr;
    }
}

如果使用Apache或者其它反向代理,自行查找对应的X-Forwarded-Proto头传递配置即可。

  • 补充social_django的配置,强制使用HTTPS回调,也可以直接硬写回调地址兜底避免自动生成错误:
SOCIAL_AUTH_REDIRECT_IS_HTTPS = True
# 硬写的回调地址必须和Facebook后台配置的完全一致
SOCIAL_AUTH_FACEBOOK_REDIRECT_URI = 'https://www.example.com/oauth/complete/facebook/'
  • 所有配置修改完成后,重启反向代理服务和Django服务,清空浏览器缓存后重新测试登录流程即可。
验证方法

可以在social_core/backends/facebook.py的auth_complete方法中打印提交的params参数,确认其中的redirect_uri已经是HTTPS协议开头的地址即可。

内容的提问来源于stack exchange,提问作者Pratik Gaikwad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 15:42:02