我们正在使用JS& PHP SDK在我们的Web应用程序上创建自定义登录过程。一切都运行良好,直到我们发现一些用户无法登录的问题(通过触发FB.login())。
经过一些研究后,我们发现用户在很长一段时间后回到网站并且SDK发出例外情况:" 此授权代码已过期。"
我们使用扩展令牌,这些令牌有效期为60天,并且在到期时,必须发出新令牌。这是通过让用户进入登录过程自动完成的。
如果这是正确的,为什么每次用户尝试使用Facebook登录我们的网站时,即使在调用FB.login()之后我们也会收到异常?
登录过程:
登录过程是JS和AJAX调用的混合,用于在Facebook上登录用户,然后在网站上登录。
1-用户进入网站
2-用户点击"使用Facebook登录"按钮
3-触发FB.login()并通过AJAX调用PHP脚本
通过AJAX执行PHP代码:
$helper = new FacebookJavaScriptLoginHelper();
try {
$FBsession = $helper->getSession();
} catch(FacebookRequestException $ex) {
// When Facebook returns an error
// $ex->getMessage() == 'This authorization code has expired.'
} catch(\Exception $ex) {
// When validation fails or other local issues
}
我无法保证这一点,我也不知道它是否有事可做,但大多数情况都是访问我们网站并登录m.facebook.com的移动用户他们第一次被要求授予我们应用的访问权限。
提前致谢
答案 0 :(得分:0)
Facebook在登录操作后发送用户(我假设您在下面粘贴代码的地方)尝试:
$ session = $ helper-> getSessionFromRedirect();
答案 1 :(得分:0)
我终于能够与移动设备取得联系,我可以重现这个问题。
调试浏览器后,我可以看到有两个fbsr_ cookies设置。一个指向“.domain.com”(注意域名前面的句号),另一个指向“domain.com”。 删除“domain.com”下的那个后,异常消失了,我能够正确登录。
PHP SDK检查:
$_COOKIE['fbsr_' . $this->appId]
它选择了“错误的”。 现在我想知道,这是怎么发生的?
答案 2 :(得分:0)
此答案适用于出于某些原因使用v3的用户。
在函数getAccessTokenFromCode
中,_oauthRequest
的结果可能是JSON格式,而不是URL格式。在代码中,结果将使用parse_str()
进行转换,因此,该结果不会返回正确的access_token
。