如何在PHP中使用Facebook的扩展令牌

时间:2013-09-13 07:17:13

标签: php facebook facebook-php-sdk

我正在开发一个网站,访问者可以使用他们的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. 故障

0 个答案:

没有答案