我正在开发一个网站,访问者可以使用他们的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。这可能会干扰吗?像这样: