我正在开发一个网站,访问者可以使用他们的 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。这可能会干扰吗?像这样的东西:
- 在服务器上获取新的扩展令牌
- 更新服务器上的令牌
- 成功!
- javascript 用常规的短期版本替换新获取的扩展令牌
- 失败