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中找到访问令牌或(我们可以将其保存在数据库中),然后我们将使用它来访问Facebook图。

如果用户未登录,我们必须生成具有访问数据的权限的访问链接。 生成链接后,我们将用户重定向到 Facebook,以获取代码以从中生成访问令牌。 当用户允许你的应用程序访问他的数据时,Facebook重定向到你的网站,变量称为CODE

        $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);
    }