我们正在使用JS和PHP SDK在我们的Web应用程序上创建自定义登录过程 . 一切都工作正常,直到我们发现某些用户无法登录的问题(通过触发FB.login()) .
经过一些研究,我们发现用户正在返回网站 after a long time ,SDK正在提供例外:“ This authorization code has expired. ” .
我们正在使用扩展令牌,这些令牌有效期为60天,并且在到期时,必须签发新令牌 . 这是通过将用户带到登录过程自动完成的 .
如果这是正确的,那么每当用户尝试使用Facebook登录我们的网站时,即使在调用FB.login()之后我们为什么会得到异常?
The login process:
登录过程是JS和AJAX调用的混合,用于在Facebook上登录用户,然后在网站上登录 .
1-用户进入网站
2-用户单击“使用Facebook登录”按钮
3-触发FB.login()并通过AJAX调用PHP脚本
PHP代码通过AJAX执行:
$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 回答
Facebook在登录操作后发送用户的位置(我假设您在下面粘贴了代码)尝试:
$ session = $ helper-> getSessionFromRedirect();
我终于能够与移动设备取得联系,我可以重现这个问题 .
调试浏览器后,我可以看到有两个fbsr_ cookies设置 . 一个指向“.domain.com”(注意域名前面的句号),另一个指向“domain.com” . 删除“domain.com”下的那个后,异常消失了,我能够正确登录 .
PHP SDK检查:
它正在选择“错误的” . 现在我想知道,这是怎么发生的?
这个答案适用于因某些原因使用v3的用户 .
在函数
getAccessTokenFromCode
中,_oauthRequest
的结果可能是JSON格式,而不是URL格式 . 在代码中,结果使用parse_str()
进行转换,因此不返回正确的access_token
.