1

我正在使用PHP SDK的PHP SDK v5,並試圖獲得長久的USER訪問令牌。
我得到它,使長壽一次,並保存到我的數據庫,然後我去到另一個頁面,我用它來獲取訪問Facebook頁面。到此爲止,一切都很順利。然後我刷新我的頁面,並且User AccessToken的[「expiry at」]設置爲1970-01-01。
我不知道發生了什麼,因爲我不重寫數據庫中的訪問令牌。最有線的是,這個令牌與Facebook一起工作。所以在刷新之前和之後都有我的代碼和響應。Facebook PHP SDK刷新站點後長期訪問令牌過期

$config = array(); 
     $config['app_id'] = xxx 
     $config['app_secret'] = xxx 
     $config['fileUpload'] = false;   
     if(!empty(tokenFromDatabse)){    
      $config['default_access_token'] = tokenFromDatabse; 
     }   
     $fb = new Facebook($config); 
     $oAuth2Client = $fb->getOAuth2Client(); 
     if(!empty(tokenFromDatabse)){ 
      try{  
       $tokenMetadata = $oAuth2Client->debugToken($fb->getDefaultAccessToken()); 
       $tokenMetadata->validateAppId($config['app_id']); 
       $tokenMetadata->validateExpiration(); 
       } 

這只是所有的行動,當然有代碼。而現在,來自Facebook的第一反應是:

object(Facebook\Authentication\AccessTokenMetadata)#689 (1) { 
    ["metadata":protected]=> 
    array(7) { 
    ["app_id"]=> 
    string(15) "xxx" 
    ["application"]=> 
    string(13) "Local_app" 
    ["expires_at"]=> 
    object(DateTime)#691 (3) { 
     ["date"]=> 
     string(26) "2015-10-20 16:07:56.000000" 
     ["timezone_type"]=> 
     int(3) 
     ["timezone"]=> 
     string(13) "Europe/Berlin" 
    } 
    ["is_valid"]=> 
    bool(true) 
    ["issued_at"]=> 
    object(DateTime)#692 (3) { 
     ["date"]=> 
     string(26) "2015-08-21 16:07:56.000000" 
     ["timezone_type"]=> 
     int(3) 
     ["timezone"]=> 
     string(13) "Europe/Berlin" 
    } 
    ["scopes"]=> 
    array(3) { 
     [0]=> 
     string(12) "manage_pages" 
     [1]=> 
     string(13) "publish_pages" 
     [2]=> 
     string(14) "public_profile" 
    } 
    ["user_id"]=> 
    string(15) "xxx" 
    } 

和後刷新看起來像這樣:

object(Facebook\Authentication\AccessTokenMetadata)#689 (1) { 
     ["metadata":protected]=> 
     array(7) { 
     ["app_id"]=> 
     string(15) "xxx" 
     ["application"]=> 
     string(13) "Local_app" 
     ["expires_at"]=> 
     object(DateTime)#691 (3) { 
      ["date"]=> 
      string(26) "1970-01-01 01:00:00.000000" 
      ["timezone_type"]=> 
      int(3) 
      ["timezone"]=> 
      string(13) "Europe/Berlin" 
     } 
     ["is_valid"]=> 
     bool(true) 
     ["issued_at"]=> 
     object(DateTime)#692 (3) { 
      ["date"]=> 
      string(26) "2015-08-21 16:07:56.000000" 
      ["timezone_type"]=> 
      int(3) 
      ["timezone"]=> 
      string(13) "Europe/Berlin" 
     } 
     ["scopes"]=> 
     array(3) { 
      [0]=> 
      string(12) "manage_pages" 
      [1]=> 
      string(13) "publish_pages" 
      [2]=> 
      string(14) "public_profile" 
     } 
     ["user_id"]=> 
     string(15) "xxx" 
     } 
+0

可能是一個錯誤訂閱這個bug https://developers.facebook.com/bugs/111761385842972 –

回答

0

擴展頁面訪問令牌不具有任何默認過期的。並且由於實現細節,用於請求擴展頁面訪問令牌的用戶訪問令牌也「無限」地有效。

所以到期價值將是0,null或類似的東西。當格式化爲日期時,這變成1970-01-01,因爲這是Unix時代的開始。

+0

但到期日期是由PHP SDK函數定義: $ oAuth2Client-> getLongLivedAccessToken(短暫的令牌); – Khanrad

+0

不知道你的意思。 – CBroe

+0

我的意思是用戶aces標記在被保存到數據庫之前被更改爲擴展。我使用SDK中的函數設置「expiry at」的值,這意味着我不使用null作爲值。 – Khanrad

相關問題