如何在localhost环境测试基于django-allauth的Facebook登录
在localhost环境测试Django + django-allauth的Facebook登录(HTTPS要求)
当然有办法解决这个问题!我之前开发Django项目时也碰到过一模一样的情况,给你几个靠谱的亲测有效方案:
方案一:用ngrok快速生成HTTPS公网代理(最简单快捷)
这是我日常开发最常用的方式,不用折腾本地证书,几分钟就能搞定:
- 下载ngrok(对应系统版本直接官网获取),解压后打开终端运行命令:
ngrok http 8000 - 运行后会得到一个类似
https://xxxxxx.ngrok.io的HTTPS地址,它会把公网请求转发到本地的http://localhost:8000 - 打开Facebook开发者后台,找到你的应用,进入「产品」→「Facebook登录」→「设置」,把ngrok地址加上django-allauth的回调路径(比如
https://xxxxxx.ngrok.io/accounts/facebook/login/callback/),加到「有效的OAuth跳转URI」列表里 - 正常启动Django的runserver:
python manage.py runserver,然后用ngrok的HTTPS地址访问网站,就能正常测试Facebook登录了
方案二:用Django runserver_plus开启本地HTTPS
如果不想用公网代理,想直接在本地用HTTPS,可以借助django-extensions的runserver_plus功能:
- 先安装依赖包:
pip install django-extensions werkzeug - 生成自签名证书(用openssl命令):
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes,按提示填信息就行,随便填也不影响使用 - 在Django的
settings.py里把django_extensions加到INSTALLED_APPS中 - 启动HTTPS版的runserver:
python manage.py runserver_plus --cert cert.pem --key key.pem - 打开Facebook开发者后台,把
https://localhost:8000/accounts/facebook/login/callback/加到「有效的OAuth跳转URI」里 - 访问
https://localhost:8000时,浏览器会提示证书不可信(自签名证书的正常现象),直接忽略警告继续访问,就能测试Facebook登录了
方案三:用mkcert生成可信本地证书(长期测试首选)
如果需要长期在本地测试,不想每次都忽略浏览器的证书警告,可以用mkcert生成本地信任的证书:
- 安装mkcert(不同系统安装方式不同:Mac用brew,Windows用choco,Linux直接下载二进制包),然后运行
mkcert -install安装本地根证书 - 生成针对localhost的证书:
mkcert localhost 127.0.0.1,会生成localhost+1.pem和localhost+1-key.pem两个文件 - 用runserver_plus启动Django:
python manage.py runserver_plus --cert localhost+1.pem --key localhost+1-key.pem - 同样在Facebook开发者后台添加
https://localhost:8000/accounts/facebook/login/callback/到跳转URI里 - 这次访问
https://localhost:8000浏览器就不会提示证书错误了,体验和真实HTTPS环境一致
额外注意事项
- 确保Facebook开发者后台的「Facebook登录」设置里,「强制HTTPS」选项是开启的(默认已开启)
- 跳转URI必须和django-allauth的回调路径完全一致,默认路径是
/accounts/facebook/login/callback/,如果修改过settings里的配置要对应调整 - 用ngrok的话,每次重启ngrok都会生成新的域名,记得去Facebook后台更新跳转URI
内容的提问来源于stack exchange,提问作者seuling
相关产品推荐
相关产品推荐

