我正在为移动设备创建Facebook应用程序。这样的应用程序显示在移动浏览器中,不像在iframe中保存的Facebook画布页面。FacebookJavaScriptLoginHelper无法在第一页刷新时验证用户
我使用JS和PHP SDK的混合来授权和验证用户。用户需要已经登录到Facebook才能使用我的应用程序。如果没有,他们需要使用Facebook登录按钮登录。作为JS和PHP SDK之间的桥梁,我使用的是FacebookJavaScriptLoginHelper。
我Facebook.php库的部分做的工作:
<?php
// Initialize the SDK
FacebookSession::setDefaultApplication($this->app_id, $this->app_secret);
// Create the login helper
$this->helper = new FacebookJavaScriptLoginHelper();
try {
$this->session = $this->helper->getSession();
} catch(FacebookRequestException $ex) {
// When Facebook returns an error
} catch(Exception $ex) {
// When validation fails or other local issues
}
if ($this->session) {
// User logged in
$this->session = new FacebookSession($this->session->getToken());
}
?>
Facebook的JS的init:
<script type="text/javascript">
window.fbAsyncInit = function() {
FB.init({
appId: '{my app id}',
status: true,
xfbml: true,
cookie: true
});
}
FB.getLoginStatus(function(response) {
console.dir(response);
});
</script>
上面的代码工作正常,但是当它失败有一个特定的情况下, 。假设我在浏览器中打开了两个选项卡:在第一个选项卡中,我打开了我的应用程序,在第二个选项卡中 - 我已登录到Facebook。两种情况可以发生:
我退出Facebook并刷新我的应用程序选项卡。其结果是正确的:
FacebookSession
是NULL
response.status
从FB.getLoginStatus
是'unknown'
。用户不是 登录。
我去第二个选项卡,重新登录Facebook的,并与我的应用程序刷新第一个标签。其结果是不正确的,但只在第一刷新:
FacebookSession
仍然是NULL
,即使- 的
FB.getLoginStatus
response.status
是'connected'
在第一刷新这背后的原因失败似乎是显而易见:在刷新Facebook cookie之前,重新加载页面PHP SDK被触发。但是,当用户注销时,它永远不会出现问题 - 在这种情况下,按照预期即时更新FacebookSession
。
当用户登录到Facebook时,它如何不起作用?
我一定会尝试。谢谢! – lesssugar 2014-11-14 16:55:36