启用OAuth严格模式后PHP SDK登录Facebook报错求助
解决严格OAuth模式下Facebook PHP SDK登录失败的问题
我之前也碰到过完全一样的问题,启用严格OAuth模式后怎么都登不上,报错和你一模一样。折腾了好几个小时才找到问题所在,给你几个实用的排查和解决方向:
确保有效OAuth重定向URI完全精确匹配
严格模式下Facebook对重定向URI的校验极其严格,哪怕是一点点差异都会触发报错。比如你的$redirect_to是https://sub.domain.com/facebook-callback.php,那在Facebook Login的有效OAuth Urls里必须填完全一致的内容:- 不能省略
https://(如果用的是HTTPS) - 不能多或者少末尾的斜杠
- 即使是同一个页面,带参数和不带参数也会被视为不同的URI,比如
https://sub.domain.com/callback和https://sub.domain.com/callback?foo=bar是两个不同的URI,都需要单独配置(如果你的回调会带参数的话)
- 不能省略
检查App Domains的配置细节
虽然你已经填了sub.domain.com和domain.com,但要确认:- 有没有拼写错误,比如多打了一个点或者字母错误
- 不要在域名前面加
http://或者https://,只需要纯域名即可 - 如果你的应用同时在主域名和子域名下使用,两个域名都必须添加,这点你已经做了,但可以再核对一遍
确认PHP代码中的重定向URL是绝对路径
很多人会犯的错误是用相对路径作为$redirect_to,比如/facebook-callback.php,这在严格模式下是不允许的。必须使用完整的带协议的绝对URL,比如:$redirect_to = 'https://sub.domain.com/facebook-callback.php';强制刷新Facebook的配置缓存
Facebook的后台有时候会缓存旧的配置,哪怕你已经改了设置也不会立刻生效。你可以:- 回到Facebook Login的设置页面,随便修改一个小选项(比如调整一下登录按钮的样式),然后点击Save Changes,触发配置刷新
- 或者在App Dashboard的Settings->Basic页面,把应用状态从“开发模式”切换到“上线模式”再切回来(注意上线模式需要完成应用审核,不过开发环境下切换一下再切回开发模式也能清缓存)
开启SDK调试模式排查实际请求
在PHP代码里开启调试模式,看看实际发送的请求URI是什么,是不是和你配置的不一致:$fb = new Facebook\Facebook([ 'app_id' => $app_id, 'app_secret' => $app_secret, 'default_graph_version' => 'v18.0', ]); $fb->setDebug(true); // 开启调试 // 然后在回调页面打印请求信息 var_dump($_GET);这样你能看到Facebook实际返回的错误细节,以及重定向的URI是否正确。
总之,严格OAuth模式的核心就是完全精确的匹配,任何细微的差异都会导致报错。按照上面的步骤逐一排查,应该能解决问题。
内容的提问来源于stack exchange,提问作者Nik Chankov
相关产品推荐
相关产品推荐

