簡體   English   中英

Facebook PHP SDK v5訪問令牌/工作流程

[英]Facebook PHP SDK v5 access tokens/workflow

我正在嘗試使用Facebook Login構建本質上是日記的日記,以使用戶能夠登錄該網站。 用戶可以使用JavaScript SDK登錄(如文檔中所建議),然后我需要在服務器端獲取用戶詳細信息,以便將用戶的日記條目存儲在數據庫中(使用Facebook用戶ID來識別用戶) )。 我正在嘗試使用getJavaScriptHelper()在PHP SDK v5中執行此操作。

我對如何正確處理/存儲訪問令牌感到有些困惑。 到目前為止,我有這個(為了簡便起見,我已經刪掉了try / catch位):

$fb = new Facebook\Facebook([
    'app_id' => $APP_ID,
    'app_secret' => $APP_SECRET,
    'default_graph_version' => 'v2.5',
]);

$helper = $fb->getJavaScriptHelper();
$accessToken = $helper->getAccessToken();

if (isset($accessToken)) {
    $oAuth2Client = $fb->getOAuth2Client();
    $longLivedAccessToken = $oAuth2Client->getLongLivedAccessToken($accessToken);
    $fb->setDefaultAccessToken($longLivedAccessToken);
    $response = $fb->get('/me');
    $userNode = $response->getGraphUser();
    $name = $userNode->getName();

    echo $name;
}

直到我離開頁面一會兒(可能是會話過期問題?),然后返回並刷新頁面,這似乎工作正常。 當我這樣做時,我發現This authorization code has expired. 已引發異常。

我的問題是:如何避免這個問題,並確保通過getLongLivedAccessToken()獲得的訪問令牌確實在文檔所指的“大約60天”內有效? 我是否需要將訪問令牌存儲在會話/ Cookie /數據庫中?

您必須檢查用戶是否登錄。 如果登錄,那么我們必須在SESSION找到訪問令牌或(我們可以將其保存在db中),然后將其用於訪問facebook圖表。

如果用戶未登錄,我們必須生成具有我們要用於訪問數據的權限的訪問鏈接。 生成鏈接后,我們將用戶重定向到Facebook以獲取代碼以從中生成訪問令牌。 當用戶允許您的應用通過變量CODE重定向到您的網站時,訪問其數據Facebook

        $fb = new Facebook\Facebook([
            'app_id' => $APP_ID,
            'app_secret' => $APP_SECRET,
            'default_graph_version' => 'v2.5',
        ]);

        $helper = $fb->getRedirectLoginHelper();

        if(isset($_GET['code']) || isset($_SESSION['fb_token'])){
           $accessToken = $helper->getAccessToken();
           if (isset($accessToken)) {
            $_SESSION['fb_token'] = (string) $accessToken;
            $oAuth2Client = $fb->getOAuth2Client();

            $longLivedAccessToken = $oAuth2Client->getLongLivedAccessToken($accessToken);

            $fb->setDefaultAccessToken($longLivedAccessToken);
            $response = $fb->get('/me');
            $userNode = $response->getGraphUser();
            $name = $userNode->getName();

            echo $name;
        }
      } esle{
           $_permissions = array(
              'public_profile',
              'user_friends',
              'email',
              'user_about_me');
           $canvasLink=callback_url_in_your_app;

          $helper = $this->_fb->getRedirectLoginHelper();
        header('location:'. $helper->getLoginUrl($canvasLink, $permissions);
    }

暫無
暫無

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

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