错误100已使用此授权码

时间:2013-03-05 15:53:51

标签: oauth-2.0 facebook-authentication facebook-access-token facebook-authorization

我有一个简单的登录按钮,指示用户:

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有可能发回错误的错误吗?

1 个答案:

答案 0 :(得分: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开发人员。