2

我有一个简单的登录按钮,可引导用户:

https://graph.facebook.com/oauth/authorize?client_id=APP_ID&redirect_uri=CALLBACK_URL&type=web_server&scope=publish_stream,offline_access,email,friends_likes,user_likes

回调请求处理程序CALLBACK_URL获取code参数并将其传递给:

https://graph.facebook.com/oauth/access_token?client_id=APP_ID&client_secret=APP_SECRET&code=CODE&redirect_uri=REQUEST_URL

并期望包含访问令牌的响应(请注意,这REQUEST_URL是来自 Facebook 的传入重定向的 URL)。这在 99% 的情况下都会成功,但偶尔我会得到这个:

{"error":{"message":"This authorization code has been used.", "type": "OAuthException","code": 100}}.

我知道该代码只能使用一次,有效期为 10 分钟,但我们会立即兑换代码,并且我们的日志记录表明我们只发送一次它以获得访问令牌。

有没有其他人见过这个?

Facebook是否有可能发回错误的错误?

4

1 回答 1

0

在受保护的函数中parseSignedRequest($signed_request)在返回之前添加这些行

/*
 * This method sets new code, and does not update persistent data,
 * that leads to persistent data loss and duplicate call to oAuth.
 * Duplicate call to oAuth with same auth code leads to error.
 * So persistent data must be changed alongside code changes.
 */
$this->setPersistentData('code', $data['code']);

这是一个临时解决方案,我不是 Facebook 开发人员。

于 2013-04-29T18:55:45.677 回答