簡體   English   中英

Facebook PHP SDK處理訪問令牌

[英]Facebook PHP SDK dealing with Access Tokens

我已經爬了很多不同的答案,但我仍然有點混淆我應該如何處理Facebook 訪問令牌 我遇到的主要問題之一是由於我的瀏覽器中存儲了哪些信息。 例如,我登錄到應用程序,令牌過期,除非我在瀏覽器中清除cookie / app設置,否則我無法再次登錄。

我偶然發現了這個問題: 如何在offline_access棄用之后擴展訪問令牌的有效性

這告訴我如何通過php創建擴展訪問令牌。

我的問題是:

1.我是否需要將訪問令牌存儲在任何地方?

2.訪問令牌過期或變為無效時會發生什么? 目前,我的應用程序只是在短期訪問過期時停止工作。

3.有沒有辦法處理它們以檢查它們是否已過期? 我正在使用php sdk並且基本上使用了標准if($ user)...像這樣:

require 'sdk/src/facebook.php';

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

  $user = $facebook->getUser();

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

  if (!$user){

    $params = array(
    'scope' => 'email',
    );

    $loginUrl = $facebook->getLoginUrl( $params );
        echo '<script type="text/javascript"> 
                window.open("'. $loginUrl .'", "_self"); 
                </script>';
                exit;

 } 
     if( $user ){

    $access_token = $facebook->getExtendedAccessToken();     

     $get_user_json = "https://graph.facebook.com/me?access_token=" 
       . $access_token;

// Rest of my code here...
}
  • 還有什么我應該做的來處理令牌嗎?

我應該在頁面之間傳遞訪問令牌還是可以在每個頁面的頂部再次調用它,如下所示:

$facebook = new Facebook(array(
  'appId'  => 'XXXXXXXXXXXX',
  'secret' => 'XXXXXXXXXXXX',
  'redirect_uri' => 'http://localhost:8000/',
));
     $token = $facebook->getExtendedAccessToken();

讓我們來看看你的問題:

我是否需要將訪問令牌存儲在任何地方?

這取決於您的應用程序。 首先問問自己,你是否需要代表用戶在他在場時(未登錄到你的應用程序)執行操作?
如果答案是肯定的 ,那么您需要擴展用戶令牌,這可以通過在您擁有有效用戶會話時調用此方法來使用PHP-SDK完成: setExtendedAccessToken()

您還應該參考此文檔: 擴展訪問令牌

訪問令牌過期或變為無效時會發生什么? ...有沒有辦法處理它們以檢查它們是否已過期?

這是代碼中的catch子句派上用場的地方,而facebook示例只記錄錯誤( error_log($e); )你應該處理它!

Facebook已經有一個關於此的教程:操作方法:處理過期的訪問令牌

您還應該參考錯誤表並相應地調整您的代碼。

還有什么我應該做的來處理令牌嗎?

往上看。

我應該在頁面之間傳遞訪問令牌還是可以在每個頁面的頂部再次調用它

您不應該這樣做,因為PHP-SDK將為您處理令牌; 你注意到你在調用: $user_profile = $facebook->api('/me'); 沒有附加用戶access_token

SDK正在添加它,因此您不必擔心它。

我只是遇到了同樣的問題,但是我在你的一些幫助下解決了這個問題。 我正在使用php-sdk連接到Facebook API,所以我就是這樣做的。

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

// Get User
$user = $facebook->getUser();

// Verifing if user is logged in.
if ($user) {
    try {
    // Proceed knowing you have a logged in user who's authenticated.
    $user_profile = $facebook->api('/me');
    } catch (FacebookApiException $e) {
    error_log($e);
    $user = null;
    }
}

// Verify if user is logged in, if it is... Save the new token.
if($user){

   // Request the access_token to the 
   $access_token = $facebook->getAccessToken()

   // Saving the new token at DB.
   $data = array('access_token' => $access_token);
   $this->db->where('userid',$user);            
   $this->db->update('facebook', $data);

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM