大约一周前,我网站上的Facebook登录工作正常,但现在当我尝试使用“代码”检索访问令牌时,我收到错误“此授权代码已被使用”。我检查了很多文档和建议,但没有任何结果。
重现步骤(使用FB PHP SDK):
使用正确的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
在我的重定向uri上接收代码参数(一切正常)
发送访问令牌请求:
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。
为什么?
答案 0 :(得分:2)
这是由于Facebook更改到目前为止已经可选,但将于12月5日推出给所有人。从12月12日突破变化的Developer Roadmap开始:
OAuth授权码的新安全限制 我们只会 允许授权代码一次性交换访问令牌 将要求他们在10内交换访问令牌 他们创作的几分钟。这符合OAuth 2.0规范 从一开始就说“授权代码必须是 短期和单次使用“。有关更多信息,请查看我们的 身份验证文档。
因此,当您第一次获得用户的access_token时,您需要存储它,然后在用户下次需要与FBAPI交互时显式设置它:$ facebook-> setAccessToken($ theToken);