我正在调整一直使用FB身份验证和访问令牌的网站,以便处理offline_access的弃用,特别是执行fb_exchange_token事务以获取网站用户的扩展持续时间令牌。它似乎有效,但我有一些问题。我的基本方法是:
我通过通常的服务器端来回程序让用户登录,最后为用户提供了有效的访问令牌。这样可以正常工作,并且看起来有效期为5300秒左右,就像标准/原始令牌一样。
然后我立即进行fb_exchange_token调用;这成功了,给了我一个新的access_token,好几个月。这是我的网站在代表用户执行操作时保存以供将来使用的令牌。
这是有道理的,对吗?一个接一个地打一个电话似乎有点多余,但它给了我延长寿命的标记,这就是我想要的。我想我可以使用原始令牌,只要它持续并且不会打扰交换,直到原始令牌到期,但(a)似乎我不得不从一开始就使用扩展的和(b)我不清楚过期的令牌可以换成持续时间长的令牌。
所以:有没有人看到这种方法有任何问题?谢谢!
答案 0 :(得分:2)
a)是的,这种方法效果很好。我用我的一些应用程序做到了。
b)请参阅本常见问题解答中的第3项。 http://dominicminicoopers.blogspot.com/2012/03/facebook-access-tokens-and-offline.html
我是否可以将我的60天访问令牌换成新的60天访问令牌?
不,对不起,你不能。您只能交换有效(意味着当前) 扩展的用户访问令牌。你不能扩展已经 扩展访问令牌。
答案 1 :(得分:1)
我今天已经注意到,要实际扩展令牌,您必须在应用程序设置中禁用offline_token。我一整天都在尝试这个设置仍然启用,我只得到标准的2小时令牌,我禁用它的那一刻,再次尝试(在用FB重新验证后)我获得了2个月的令牌。希望这可以节省人们的时间(文档根本不是很清楚)。
答案 2 :(得分:1)
为什么不做这样的事情(比做所有爆炸更清洁)?
$response = $this->facebook->api('/oauth/access_token', 'GET', array(
'grant_type' => 'fb_exchange_token',
'client_id' => $app_id,
'client_secret' => $app_secret,
'fb_exchange_token' => $access_token
));
parse_str($response, $output_array);
$long_lived_access_token = $output_array['access_token'];
$expires = $output_array['expires'];
答案 3 :(得分:0)
截至4月10日,这仍然适用于人们吗?昨天我注意到我们的原始令牌在60天内停止运行,所以我实现了fb_exchange_token调用。但是我回复的反应仍然只有2个小时左右...即:
=的access_token ... AAAEHLUxxx XX&安培;期满= 4404
我一直在使用Android SDK获取令牌,我的应用已弃用了offline_access权限。它工作了大约一个星期,所有令牌过去都持续了60天。
答案 4 :(得分:0)
$url = "https://graph.facebook.com/oauth/access_token?client_id=$client_id&client_secret=$client_secret&grant_type=fb_exchange_token&fb_exchange_token=$fb_access_token";
$graph = file_get_contents($url);
$graph = explode("=", $graph);
$graph = explode("&", $graph[1]);
$new_access_token = $graph[0];