2

大约一周前,我网站上的 Facebook 登录工作正常,但现在当我尝试使用“代码”检索访问令牌时,出现错误“已使用此授权代码”。我检查了很多文档和建议,但没有任何结果。

重现步骤(使用 FB PHP SDK):

  1. 使用正确的 urlencoded 返回 uri(带有斜杠)将用户发送到 FB auth:

    https://www.facebook.com/dialog/oauth?client_id=[my_cid]&redirect_uri=http%3A%2F%2Fmydomain.com%2Fauth%2Ffacebook%2F&state=e15e0894cd922098f9f8f340c820538d&scope=email&display=page
    
  2. 在我的重定向 uri 上接收代码参数(一切正常)

  3. 发送访问令牌请求:

    https://graph.facebook.com/oauth/access_token?client_id=[my_cid]&redirect_uri=http%3A%2F%mydomain.com%2Fauth%2Ffacebook%2F&client_secret=[my_secret]&code=[long_code_goes_here]
    

我也试过没有urlencoded redirect_uri。

为什么?

4

1 回答 1

2

这是由于到目前为止 Facebook 的更改是可选的,但将在 2012 年 12 月 5 日为所有人推出。来自 2012 年12 月重大变更的开发者路线图:

OAuth 授权代码的新安全限制 我们只允许将授权代码交换为访问令牌一次,并要求在创建后 10 分钟内将它们交换为访问令牌。这符合 OAuth 2.0 规范,该规范从一开始就声明“授权代码必须是短暂的且一次性使用”。有关更多信息,请查看我们的身份验证文档。

因此,当您第一次为用户获取 access_token 时,您需要存储它,然后在下次用户需要与 FBAPI 交互时显式设置它: $facebook->setAccessToken($theToken);

于 2012-12-24T06:40:24.503 回答