本地HTTP环境下使用Facebook Login/Graph API遇阻求助
解决Facebook Login本地HTTP环境下的Insecure Login Blocked问题
首先,你遇到的这个错误是因为Facebook现在对新创建的测试应用强制启用了HTTPS登录,旧问答里提到的“关闭Enforce HTTPS”方法已经不适用了——新应用的这个选项确实会锁定为Yes,没法修改。下面给你两个最简便的解决方案,不用复杂配置就能快速继续开发:
方法1:用ngrok快速生成HTTPS公网隧道(推荐)
这是本地开发测试第三方OAuth最常用的方法,一键把你的localhost:8000转换成HTTPS域名:
- 安装ngrok:Mac上直接用Homebrew执行
brew install ngrok - 正常启动你的Django服务:
python manage.py runserver - 另开一个终端窗口,运行
ngrok http 8000,你会看到类似这样的输出:Forwarding https://abc123.ngrok.io -> http://localhost:8000
- 打开Facebook应用的设置页面:
- 把
https://abc123.ngrok.io添加到Valid OAuth Redirect URIs列表中 - 把应用的Site URL也改成这个HTTPS地址
- 把
- 现在用
https://abc123.ngrok.io访问你的应用,就能正常调用Facebook Login的JS SDK,不会再报Insecure Login的错误。
方法2:给Django本地服务开启HTTPS
如果不想用外部工具,可以用django-sslserver包快速开启HTTPS:
- 安装依赖包:
pip install django-sslserver - 在Django项目的
settings.py里,把sslserver添加到INSTALLED_APPS列表中 - 启动服务时换成HTTPS命令:
python manage.py runsslserver 8000 - 现在你的本地访问地址是
https://localhost:8000,把这个地址加到Facebook应用的Valid OAuth Redirect URIs和Site URL里 - 浏览器打开时会提示证书不安全,手动信任即可(Mac上可以通过钥匙串访问添加信任)
关于手动构建登录流程的疑问
你提到的手动登录流程其实也绕不开HTTPS要求——Facebook的登录端点现在只接受HTTPS请求,所以即使你手动构建跳转逻辑,HTTP环境下还是会被拦截。所以优先解决本地HTTPS的问题才是核心,上面两个方法都能快速搞定,之后你的JS SDK代码就能正常工作了。
另外,你的JS代码本身没有问题,FB.init里的cookie: true设置是正确的,方便后续用Python获取会话中的token,等HTTPS问题解决后,这段代码应该就能正常触发登录和获取登录状态了。
内容的提问来源于stack exchange,提问作者rishijd
相关产品推荐
相关产品推荐

