本地用artisan serve测试Laravel Socialite Facebook登录遇HTTPS限制问题
本地测试Facebook登录(HTTPS强制要求)的可行方案
我之前折腾本地Facebook登录的时候也踩过这个HTTPS的坑,自从Facebook今年3月强制要求所有回调必须用HTTPS之后,本地测试确实得换点法子,给你分享几个亲测有效的方案:
方案1:用Laravel Valet快速开启HTTPS(推荐Mac/WSL用户)
如果你用的是Mac或者Windows上的WSL,Laravel Valet是最省心的选择,它默认支持自动配置HTTPS:
- 确保你已经安装好了Valet(没装的话跟着Laravel官方文档走就行)
- 进入你的Laravel项目目录,运行:
valet secure - 这时候Valet会给你的本地域名(比如
your-project.test)生成一个受系统信任的SSL证书,之后直接访问https://your-project.test就能用HTTPS访问项目了 - 最后把Facebook应用里的回调URL改成这个HTTPS地址,比如
https://your-project.test/login/facebook/callback,保存之后就能正常测试登录了
方案2:用Ngrok把本地服务映射为公网HTTPS地址(跨平台通用)
Ngrok是一个能把本地服务暴露成公网HTTPS地址的工具,不管你用什么系统都能用:
- 先下载Ngrok并解压到你的系统可执行路径里
- 先启动你的Artisan Server:
php artisan serve(默认端口8000) - 打开新的终端窗口,运行:
ngrok http 8000 - 这时候Ngrok会生成一个类似
https://abc123-xx-xx-xx-xx.ngrok.io的临时HTTPS地址 - 把Facebook应用的回调URL改成这个地址加上你的回调路径,比如
https://abc123-xx-xx-xx-xx.ngrok.io/login/facebook/callback - 注意:每次重启Ngrok这个地址都会变,需要重新更新Facebook的回调URL;如果想固定地址可以购买Ngrok的付费版
方案3:给Artisan Server配置自签名SSL证书(无需额外工具)
如果你不想用第三方工具,也可以自己生成自签名证书给Artisan Server用:
- 用OpenSSL生成证书(大部分系统自带OpenSSL),在项目根目录运行:
mkdir -p storage/ssl openssl req -x509 -sha256 -nodes -newkey rsa:2048 -days 365 -keyout storage/ssl/server.key -out storage/ssl/server.crt - 然后启动Artisan Server的时候指定证书:
php artisan serve --ssl --ssl-key=storage/ssl/server.key --ssl-cert=storage/ssl/server.crt - 现在访问
https://localhost:8000,浏览器会提示证书不安全,这时候需要手动信任这个证书:- Mac:打开「钥匙串访问」,导入生成的
server.crt,右键点击证书选择「显示简介」,把「信任」里的选项改成「始终信任」 - Windows:打开「Internet选项」→「内容」→「证书」,导入
server.crt并设置信任
- Mac:打开「钥匙串访问」,导入生成的
- 信任证书之后,把Facebook应用的回调URL改成
https://localhost:8000/login/facebook/callback,就可以正常测试了
额外注意事项
- 确保你的Facebook应用处于开发模式,这样只有你添加的测试用户能登录,不会影响正式环境
- 回调URL必须完全匹配,包括协议(HTTPS)、域名、路径,不能有多余的斜杠或者拼写错误
内容的提问来源于stack exchange,提问作者Robert
相关产品推荐
相关产品推荐

