我一直在为我的rails应用程序设置facebook身份验证,在测试时,在使用我的facebook帐户登录后,我不断收到此错误:
OAuth2::Error:
{"error":{"message":"This authorization code has been used.","type":"OAuthException","code":100}}
我不确定从哪里开始,但似乎无法在网上找到任何其他内容。任何指导都将不胜感激,很高兴提供更多信息,如果它有用。
答案 0 :(得分:17)
我也有这个问题。我看到“(facebook)Callback阶段已启动。”在我的Rails日志中两次消息。事实证明我正在初始化FB身份验证两次(我正在使用Devise和Omniauth-Facebook),我猜其中一个是试图重置访问令牌。
在Omniauth-Facebook中禁用初始化程序(config / initializers / omniauth.rb)解决了我的问题。
答案 1 :(得分:7)
这是由于Facebook更改到目前为止已经可选,但将于12月5日推出给所有人。从12月12日突破变化的Developer Roadmap开始:
OAuth授权码的新安全限制 我们只会 允许授权代码一次性交换访问令牌 将要求他们在10内交换访问令牌 他们创作的几分钟。这符合OAuth 2.0规范 从一开始就说“授权代码必须是 短期和单次使用“。有关更多信息,请查看我们的 身份验证文档。
您需要更新您的应用以解决此问题。
干杯
答案 2 :(得分:2)
此错误发生在最后一次facebook push之后,并且今天早上一直是reported到Facebook。
所以我想我们只需要等待,同时将更多详细信息发布到此report并关注以及帮助并征求facebook人员解决此问题问题!的
答案 3 :(得分:1)
我错误地初始化了OmniAuth
两次,并且两次调用config/initializers/omniauth.rb
。
这会将OmniAuth::Builder
两次添加到中间件堆栈。随着最近的Facebook更改,这开始失败,错误100
。
在设法解决此问题后,确保OmniAuth::Builder
已添加。
要仔细检查中间件堆栈,请运行:
rake middleware
答案 4 :(得分:1)
我遇到了同样的问题,终于找到了我的问题。 因此,对于那些有这个问题且只使用Omniauth而没有设计的人来说,问题的根本原因可能是错误的重定向路径。
在我的情况下,在routes.rb中我有,例如:
get "mycontroller/home"
没关系,但在我的SessionController中我也有:
def create
auth_hash = request.env['omniauth.auth']
user = User.from_omniauth(auth_hash)
session[:user_id] = user.id
redirect_to "mycontroller/home"
end
所以我通过改变控制器中的这一行来实现它的工作:
redirect_to "mycontroller/home"
到
redirect_to "/mycontroller/home"
答案 5 :(得分:0)
所以我能够解决这个问题。似乎我的应用程序正在处理facebook身份验证,然后尝试再次执行它并产生此错误。因为我试图重定向到root_url,所以很奇怪。在任何情况下,在我的数据库中存储用户信息后,将我重定向的页面从“root_url”更改为“/”似乎完全不同。
我建议您查看开发日志,看看是否收到类似的错误。