2014-11-08 16 views
0

我正在爲移動設備創建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並刷新我的應用程序選項卡。其結果是正確的:

  • FacebookSessionNULL
  • response.statusFB.getLoginStatus'unknown'。用戶不是 登錄。

我去第二個選項卡,重新登錄Facebook的,並與我的應用程序刷新第一個標籤。其結果是不正確的,但只在第一刷新:

  • FacebookSession仍然是NULL,即使
  • FB.getLoginStatusresponse.status'connected'

在第一刷新這背後的原因失敗似乎是顯而易見:在刷新Facebook cookie之前,重新加載頁面PHP SDK被觸發。但是,當用戶註銷時,它永遠不會出現問題 - 在這種情況下,按照預期即時更新FacebookSession

當用戶登錄到Facebook時,它如何不起作用?

回答

2

這有幫助嗎?

對FB.getLoginStatus的後續調用將從此緩存響應中返回數據。這可能會導致用戶在上次完整會話查詢後登錄(或離開)Facebook的問題,或者用戶在其賬戶設置中刪除了您的應用程序。

爲了解決這個問題,您可以調用FB.getLoginStatus並將第二個參數設置爲true來強制往返Facebook - 有效地刷新響應對象的緩存。

FB.getLoginStatus(function(response) { 
    // this will be called when the roundtrip to Facebook has completed 
}, true); 

來源:https://developers.facebook.com/docs/reference/javascript/FB.getLoginStatus

科:往返於Facebook的服務器

+0

我一定會嘗試。謝謝! – lesssugar 2014-11-14 16:55:36