Facebook JS + PHP SDK返回异常此授权代码已过期

时间:2015-05-20 13:49:41

标签: facebook facebook-javascript-sdk facebook-php-sdk facebook-sdk-4.0

我们正在使用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的移动用户他们第一次被要求授予我们应用的访问权限。

提前致谢

3 个答案:

答案 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