2011-01-05 35 views
10

我正在構建一個使用FB連接的Web應用程序(PHP)。我通過facebook提供的PHP lib的幫助成功註冊/登錄用戶。我也可以張貼到牆上,使用此代碼我可以存儲Facebook訪問令牌並在以後使用它嗎?

 Facebook::$CURL_OPTS[CURLOPT_SSL_VERIFYPEER] = false; 
    Facebook::$CURL_OPTS[CURLOPT_SSL_VERIFYHOST] = 2;    
    $facebook = new Facebook(array(
     'appId' => $fb_key, 
     'secret' => $fb_secret, 
     'cookie' => true, // enable optional cookie support 
    )); 
    $session = $facebook->getSession(); 
    if ($session) 
    { 
     $facebook->api('/me/feed', 'POST', array('message'=>$message, 'link'=>$link['href'], 'name'=>$link['text']));     
    } 

但是,如果我手動去我的瀏覽器的cookie管理器和刪除存儲FB會話cookie的,代碼不起作用。我唯一擁有的是我用DB存儲的用戶FB ID。即使FB會話丟失,是否有任何方法可以發佈到用戶的牆上?將用戶的FB訪問令牌存儲在數據庫中以便稍後發佈到牆上或訪問令牌相對較短是否有意義?

這裏是我的應用程序可能發生的示例情形: 用戶點擊FB按鈕,授權我的應用程序,被重定向回我的網站,我基於由FB提供的數據自動創建一個帳戶,我也存儲用戶的FB ID以便我可以稍後登錄該用戶。現在他瀏覽網站,輸入一些信息,並將此信息發佈到他的牆上。目前一切都很好,因爲用戶的瀏覽器持有由FB創建的cookie。現在用戶離開該網站並聯系網站管理員。管理員打開他自己的瀏覽器,進入管理界面並代表該用戶發佈內容。現在,擁有該用戶的FB ID並假定該用戶沒有撤​​銷權限,我仍可以將此內容發佈到他的牆上嗎?

回答

8

UPDATE:此答案不再有效,因爲offline_access已棄用。

您需要請求offline_access權限。檢查permissions文檔。

編輯根據更新和評論 - 有關刪除offline_access的一些信息可以找到here

+0

謝謝,效果很好! – Eugene 2011-01-05 20:40:31

+4

這將被棄用。嘗試使用60天的access_token。 – funerr 2012-06-13 19:37:34

23

使用Facebook PHP SDK v3(see on github),詢問和使用用戶離線訪問令牌非常簡單。這是你如何做到的。

下載離線訪問令牌

首先,你檢查,如果用戶登錄或不:

require "facebook.php"; 
$facebook = new Facebook(array(
    'appId' => YOUR_APP_ID, 
    'secret' => YOUR_APP_SECRET, 
)); 

$user = $facebook->getUser(); 

if ($user) { 
    try { 
    $user_profile = $facebook->api('/me'); 
    } catch (FacebookApiException $e) { 
    $user = null; 
    } 
} 

如果他不是,你產生了「使用Facebook登入」 URL請求的offline_access許可:

if (!$user) { 
    $args['scope'] = 'offline_access'; 
    $loginUrl = $facebook->getLoginUrl($args); 
} 

,然後顯示在你的模板的鏈接:

<?php if (!$user): ?> 
    <a href="<?php echo $loginUrl ?>">Login with Facebook</a> 
<?php endif ?> 

然後,當用戶登錄時,您可以檢索脫機訪問令牌並將其存儲。爲了得到它,請致電:

if ($user) { 
    $token = $facebook->getAccessToken(); 
    // store token 
} 

使用離線訪問令牌

要使用離線訪問令牌時未登錄的用戶:

require "facebook.php"; 
$facebook = new Facebook(array(
    'appId' => YOUR_APP_ID, 
    'secret' => YOUR_APP_SECRET, 
)); 

$facebook->setAccessToken("..."); 

現在你可以進行API調用對於此用戶:

$user_profile = $facebook->api('/me'); 

希望有所幫助!

+2

絕妙的回答。你應該寫Facebook文檔,因爲它比已有的更好 – 2011-06-10 01:59:22

+0

謝謝邁克爾:) – Quentin 2011-06-10 03:18:10

+0

非常非常好的解決方案,我一直在尋找3天。 – 2012-09-16 15:56:00

相關問題