2012-04-13 147 views
0

我正在構建一個將朋友數據導入本地數據庫的應用程序,並且工作正常。訪問cron的用戶配置文件

我正在嘗試創建一個由每日cron運行的腳本,該腳本將迭代本地數據庫中的用戶配置文件並更新好友數據。

我正在使用PHP SDK。

我已啓用depreacte_offline_access標誌。

這是否意味着訪問令牌將在60天內自動過期,還是我需要做其他事情?

如果用戶在同一瀏覽器中籤出應用程序或Facebook,我仍然可以從cron腳本中檢索配置文件數據?

我是正確的思維,所有我需要做的是retrive與訪問令牌:

$access_token = $facebook->getAccessToken(); 

然後將其存儲在數據庫中,然後設置訪問令牌:

$facebook->setAccessToken($new_access_token); 

然後用

$facebook->getUser('/me'); 

另外我如何查看訪問令牌的過期日期?

下面是一個腳本來遍歷和retreive配置文件,但如果我在瀏覽器中運行它只適用於當前登錄用戶或我得到異常「OAuthException:錯誤驗證訪問令牌:會話無效,因爲用戶註銷「。

<?php 
require_once(THEME_INCLUDES_PATH . 'facebook.php'); 

$config = array(); 
$config['appId'] = APP_ID; 
$config['secret'] = APP_SECRET; 
$config['fileUpload'] = false; // optional 

$facebook = new Facebook($config); 

$sql = "SELECT `access_token` FROM `fb_user`"; 
$result = $db1->db_query($sql); 

while($details = $db1->db_fetch_array($result)){ 

    if($details['access_token']){ 

     $facebook->setAccessToken($details['access_token']); 
     $fb_user = $facebook->getUser('/me'); 

     if($fb_user){ 

      try { 
       $fb_profile = $facebook->api('/me');   
       print_r($fb_profile); 
      } 

      catch (FacebookApiException $e){ 
       echo $e; 
       $fb_user = false; 
      } 
     } 
    } 
} 
?> 

回答

0

您現在沒有辦法做到現在您已經棄用offline_access的內容。

這個想法是,當用戶實際與您的應用程序交互時,您的應用程序只能訪問用戶數據。 訪問令牌有效期約爲60天(取決於您如何得到它),但由於各種原因(例如用戶移除您的應用,更改密碼等等),它可能會失效。

當發生這種情況或者到期日期到來時,爲了獲得新的令牌,你不能做任何事情,除非用戶重新連接你的應用程序,然後你可以得到一個新的令牌或者擴展一個新的令牌。

當用戶實際與您的應用程序進行交互時,您將不得不更新所有數據,而不是稍後。

official post about the deprecation of the offline_access它說:你能得到一個 有效的「授權碼」,以能夠再次使服務器端OAuth 調用之前

用戶必須訪問應用程序。應用程序將無法設置 試圖自動延長到期時間的背景/ cron作業,因爲 「授權碼」是短暫的並且已過期。


編輯

官爵:Removal of offline_access Permission描述了一個新的端點延長有效的訪問令牌,在兩種情況之一:如果應用程序從一個client-side flow或簽名的請求得到了令牌:

使用下面的新端點,您將能夠延長現有的有效access_token的 到期時間。如果 access_token最初是通過客戶端OAuth調用產生的,或者 通過signed_request產生,則該端點實際上會返回一個新的 access_token。

它還指出:

如果的access_token從服務器端OAuth呼叫產生時, 所得的access_token將具有更長的過期時間。

所以我的建議很簡單,使用server-side flow來生成訪問令牌。

至於令牌無效的事件列表,他們沒有一個完整的清單,但你可以在同一頁面中找到有關它的信息:

處理過期的令牌,用戶密碼更改,卸載應用程序和用戶 註銷

無論如果您的應用程序所要求的權限offline_access,應用程式,其中 用戶更改他們的密碼,deauthorizes一個應用程序,或註銷 應該在正常情況下,處理過期的訪問令牌。更多 關於這些案例的信息,包括一個簡單的代碼解決方案,導致 到統一的用戶體驗可以在blog post找到。

你可以檢查這個文檔:Handling Invalid and Expired Access Tokens

+0

這基本上是正確的,但由於其他原因令牌可能失效(正如我在我的回答中提到的)。 – 2012-04-14 09:53:46

+0

我的理解是,一旦用戶從站點獲得有效訪問權限,cron腳本將能夠訪問其配置文件,但不會延長訪問令牌的過期時間。所以主要問題是啓用offline_access標誌似乎不會自動使過期日期持續60天,而我不確定我需要做什麼?另一件事是,似乎沒有一個可以導致訪問令牌失效的完整記錄的事件列表。 – 2012-04-14 09:55:42

+0

不要刪除您的評論,這會讓以後有誰閱讀它時感到困惑。我用更多的信息編輯了我的答案。 – 2012-04-14 10:12:58