Laravel 5.6+Socialite 3开启严格模式下Facebook登录失效
我之前也碰到过一模一样的情况,严格模式开启后Facebook的域名校验会变得非常苛刻,哪怕一点点配置细节不对都会触发这个报错。咱们一步步排查:
检查Facebook应用的所有域名配置项
别只盯着「应用域名」这一个地方,这些位置也得仔细核对:- 「产品」>「Facebook登录」>「设置」里的有效的OAuth跳转URI:必须精确填写你的回调地址,比如
https://yourdomain.com/login/facebook/callback,要和Laravel配置里的回调地址完全一致——包括http/https协议、有没有www后缀,半点儿都不能差。 - 「基本设置」里的网站域名:填你的主域名(比如
yourdomain.com),如果有子域名需要支持,也得逐个加上(严格模式下不建议用通配符*.yourdomain.com,除非确实需要批量适配)。 - 「基本设置」里的隐私政策URL和服务条款URL:这两个必须是你配置域名下的有效地址,不能留空或者用外部域名,严格模式会校验这两项的域名归属。
- 「产品」>「Facebook登录」>「设置」里的有效的OAuth跳转URI:必须精确填写你的回调地址,比如
确认Laravel环境的URL配置
- 打开
.env文件,检查APP_URL是否和你的实际域名完全一致,比如是HTTPS就填https://yourdomain.com,别漏了协议头。Socialite生成回调地址会依赖这个配置,这里错了,跳转URI自然就不匹配。 - 可以临时在路由代码里加一行
dd(route('login.facebook.callback')),打印出实际生成的回调地址,和Facebook后台配置的对比,看看有没有大小写、斜杠这类细微差异。
- 打开
严格模式下的额外注意事项
- 严格模式会校验请求的「Referrer Policy」和「Origin」,如果你的网站是在iframe里运行的,得去Facebook后台「设置」>「高级」>「嵌入设置」里,把你的域名加入「有效的OAuth嵌入来源」。
- 清除浏览器缓存和Cookie,有时候旧的会话数据会干扰验证;也可以用隐身模式测试,排除缓存问题。
检查Socialite的配置
打开config/services.php,确认Facebook的配置项:'facebook' => [ 'client_id' => env('FACEBOOK_CLIENT_ID'), 'client_secret' => env('FACEBOOK_CLIENT_SECRET'), 'redirect' => route('login.facebook.callback'), ],这里的
redirect建议直接用route()生成,而不是硬编码字符串,避免手动输入错误。修改后记得执行php artisan config:clear清除配置缓存,确保修改生效。
我当时就是漏填了「有效的OAuth跳转URI」里的精确回调地址,导致严格模式下一直报错,填对之后就正常了,按照这些步骤排查应该能解决你的问题。
内容的提问来源于stack exchange,提问作者iohan
相关产品推荐
相关产品推荐

