2010-09-09 133 views
1

我目前正在爲我的項目使用PHP Facebook SDK(http://github.com/facebook/php-sdk/)。我已經設置好了,用戶必須點擊一個鏈接才能訪問Facebook,Facebook會驗證用戶使用該應用程序,然後將會話詳細信息返回到我的網站,這很好。但是,我希望將這些會話詳細信息存儲在數據庫中,以便用戶登錄時可隨時訪問其帳戶中的信息。目前,如果用戶從Facebook註銷,然後嘗試從我的網站檢索信息,我會收到以下異常「OAuthInvalidTokenException:處理訪問令牌時出錯」。如果用戶在同一臺​​PC上登錄到Facebook,那麼就沒有問題。Facebook PHP SDK - 保持登錄狀態

有什麼我必須設置,或者是否有其他方式我應該執行此連接能夠檢索數據時,用戶沒有登錄?

我用得到的代碼/設置了Facebook會話:

require 'libraries/facebook/facebook.php'; 

// Create our Application instance (replace this with your appId and secret). 
$facebook = new Facebook(array(
    'appId' => 'xxxx', 
    'secret' => 'xxxx', 
)); 

$session = $facebook->getSession(); 

$me = null; 
// Session based API call. 
if ($session) { 
    //Save to database 

    } catch (FacebookApiException $e) { 
     error_log($e); 
    } 
} else { 
    $loginUrl = $facebook->getLoginUrl(); 
    header('Location: ' . $loginUrl); 
} 

有一次我保存從這一部分數據庫中的會話,我通過發佈系列化會議,這顯示數據庫中的數據:

$session = unserialize($_POST['session']); 
    require_once('libraries/facebook/facebook.php'); 

    $facebook = new Facebook(array(
     'appId' => 'xxxx', 
     'secret' => 'xxxx', 
    )); 

    $facebook->setSession($session, false); 

    try { 
     $uid = $facebook->getUser(); 
     // Do stuff 
    } catch (FacebookApiException $e) { 
     echo "<tr><td>" . $e . "</td>"; 
    } 

這裏有什麼明顯的錯誤嗎?或者我是否可以不使用此方法創建oAuth連接,以便在用戶未登錄時向用戶請求數據?

感謝,

+1

這個項目是使用Facebook Connect的第三方網站;桌面應用程序;或現場Facebook應用程序? – 2010-09-09 10:04:17

+2

這是一個網站 - 不過在實驗中,我已經將應用程序的類型改爲「原生應用程序」,然後它提供了「保持登錄到xxx」的選項,可以打勾這是我正在尋找的! – Dan 2010-09-09 10:44:31

+0

@Dan你在哪裏找到該複選框?我已經切換到「原生」,但我無法看到我的應用程序頁面上的任何地方的複選框:( – Chud37 2013-02-28 09:34:00

回答

2

默認情況下,您從Facebook平臺收到的訪問令牌(OAuth令牌)僅爲會話長度。所以,你所描述的是預期的。

如果您想要在用戶註銷後仍繼續與API交互,您需要向他們請求offline_accessextended permission,這會讓您的訪問令牌「長壽」,您可以將其存儲在數據庫供以後使用。

請注意,如果用戶修改授予您的應用的權限,您的訪問令牌將變爲無效(或至少不一致)。但是您可以通過Real Time Updates跟上權限更改。

注:保持用戶「登錄」,只是使您能夠代表他們行事時,他們在不登錄電源

1

我已經改變了應用程序的類型是「原生應用」而不是「HTML5 /移動網絡」,然後提供選項「保持登錄到XXX」可以選擇,但後者似乎沒有提供。已經測試過,現在看起來還在工作,這是個好消息!

-4

只需在查詢的API通過以下方式獲取註銷url ...

$logoutUrl=$facebook->getLogoutUrl(); 

使用$ logoutUrl將用戶登出!而已!