0

我正在开发一个网站,访问者可以使用他们的 Facebook 帐户登录。默认访问令牌的生命周期有点太短 - 2 小时 - 我喜欢,这意味着用户必须经常登录。因此,我改用扩​​展访问令牌,其生命周期为 60 天。

但是,我无法让 setExtendedAccessToken 方法工作。我应该什么时候运行它?在每个页面请求上?这似乎不对。我应该只在用户登录后调用它,因为他们从 Facebook 登录页面重定向回来吗?

此外,setExtendedAccessToken 会破坏当前会话,这可能是我无法让它工作的原因......

我试图进行图形调用以获取这样的令牌:

$accessToken = $facebook->getAccessToken();
$graph_url   =  "https://graph.facebook.com/oauth/access_token?";
$graph_url  .=  "client_id=".$facebookAppId;
$graph_url  .=  "&client_secret=".$facebookSecret;
$graph_url  .=  "&grant_type=fb_exchange_token";
$graph_url  .=  "&fb_exchange_token=".$accessToken;
$response   = @file_get_contents($graph_url);            
$params     = null;
parse_str($response, $params);
$extendedToken = $params['access_token'];

这样,我得到了一个扩展令牌,但我该怎么处理它呢?我努力了

$facebook->setAccessToken($extendedToken);

但这似乎无济于事。

更新

这是我的最新版本

if (isset($_GET["code"])) {
    $accessToken = $facebook->getAccessToken();
    $graph_url   =  "https://graph.facebook.com/oauth/access_token?";
    $graph_url  .=  "client_id=".$facebookAppId;
    $graph_url  .=  "&client_secret=".$facebookSecret;
    $graph_url  .=  "&grant_type=fb_exchange_token";
    $graph_url  .=  "&fb_exchange_token=".$accessToken;

    $response = @file_get_contents($graph_url);      

    $params = null;
    parse_str($response, $params);
    $facebook->setAccessToken($params['access_token']);
}

这将返回一个有效的扩展令牌,并且在我调用 setAccessToken 时似乎更新了当前令牌。但是下次重新加载页面或站点上的任何其他页面时,$facebook->getAccessToken 会再次返回一个短暂的令牌。

更新 2

我还在网站上使用 Facebook Javascript SDK。这可能会干扰吗?像这样的东西:

  1. 在服务器上获取新的扩展令牌
  2. 更新服务器上的令牌
  3. 成功!
  4. javascript 用常规的短期版本替换新获取的扩展令牌
  5. 失败
4

0 回答 0