我正在爲移動設備創建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