2

我正在调整一个已经使用 FB 身份验证和访问令牌一段时间的站点,以处理不推荐使用的 offline_access,特别是执行 fb_exchange_token 的事情来为站点的用户获取延长期限的令牌。它似乎有效,但我有一些问题。我的基本做法是:

  • 我通过通常的服务器端来回过程让用户登录,最后给了我一个有效的用户访问令牌。这工作正常,并且似乎在 5300 秒左右有效,就像标准/原始令牌一样。

  • 然后我立即进行 fb_exchange_token 调用;这成功了,并给了我一个新的 access_token 可以使用几个月。这是我的网站在代表用户执行操作时保存以备将来使用的令牌。

这是有道理的,对吧?一个接一个地打一个电话似乎有点多余,但它让我得到了延长寿命的令牌,这正是我想要的。我想我可以使用原始令牌,只要它持续存在,并且在原始令牌过期之前不打扰交换,但是(a)似乎我不妨从一开始就获取并使用扩展的令牌和(b)我不清楚是否可以将过期的令牌换成延长期限的令牌。

所以:有人看到这种方法有什么问题吗?谢谢!

4

5 回答 5

2

a) 是的,这种方法效果很好。我用我的一些应用程序来做到这一点。

b) 请参阅此常见问题解答中的第 3 项。 http://dominicminicoopers.blogspot.com/2012/03/facebook-access-tokens-and-offline.html

我可以将我的 60 天访问令牌换成新的 60 天访问令牌吗?

不,对不起,你不能。您只能将有效(即当前)用户访问令牌交换为扩展令牌。您不能扩展已扩展的访问令牌。

于 2012-04-05T23:51:27.567 回答
1

I've noticed today that for the token to actually be extended you have to disable the offline_token within your application settings. I was trying all day with this setting still enabled and I was only getting standard 2 hour tokens, the moment I disabled it, and tried again (after re-authenticating with FB) I got given a 2 month token. Hopes this saves people time (the documentation isn't very clear at all haha).

于 2012-04-16T22:54:26.743 回答
1

Why not just do something like this (much cleaner than doing all those explodes)?

$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'];
于 2012-06-12T17:12:51.423 回答
0

截至 4 月 10 日,这仍然适用于人们吗?我昨天注意到我们的原始代币在 60 天内不再有效,因此我实施了 fb_exchange_token 调用。但是我得到的回复仍然只持续了大约 2 个小时.. 即:

access_token=AAAEHLUxxx...xx&expires=4404

我一直在使用 Android SDK 来获取令牌,并且我的应用已弃用了 offline_access 权限。它工作了大约一周,所有代币过去都可以使用 60 天。

于 2012-04-10T16:50:46.360 回答
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];
于 2012-04-19T15:00:31.383 回答