我一直在为我的rails应用程序设置facebook身份验证,在测试时,用我的facebook帐户登录后,我不断收到这个错误:
OAuth2::Error:
{"error":{"message":"This authorization code has been used.","type":"OAuthException","code":100}}
我真的不知道从哪里开始,但似乎在网上找不到其他关于它的信息。任何指导都将不胜感激,如果有用的话,很乐意提供更多信息。
我也遇到了这个问题。我在Rails日志中两次看到"(facebook)回调阶段启动"的消息。事实证明,我初始化了两次FB身份验证(我使用的是Devise和Omniauth Facebook),我猜其中一次是试图重置访问令牌。
禁用Omniauth Facebook中的初始值设定项(config/initializers/ominiauth.rb)修复了我的问题。
这是由于Facebook的更改,到目前为止这些更改是可选的,但将于12/5/12为所有人推出。来自12月12日突破性变化的开发者路线图:
OAuth授权码的新安全限制我们只会允许将授权码交换为访问令牌一次,并且将要求在10内将其兑换为访问令牌他们创作的分钟数。这符合OAuth 2.0规范从一开始就规定"授权代码必须短期和一次性使用"。有关更多信息,请查看我们的身份验证文档。
你需要更新你的应用程序才能对此进行说明。
干杯
这个错误发生在上一次facebook推送之后,今天早上刚刚向facebook报告。
因此,我想我们只需要等待,在此期间,将更多细节发布到这份报告中,并关注它,以帮助并寻求脸书用户来解决这个问题
我错误地初始化了OmniAuth
两次,调用了config/initializers/omniauth.rb
两次。
这将向中间件堆栈中添加两次OmniAuth::Builder
。随着最近Facebook的更改,此操作开始失败,出现错误100
。
一旦我设法解决了这个问题,就确保添加了OmniAuth::Builder
。
要仔细检查中间件堆栈,请运行以下命令:
rake middleware
我遇到了同样的问题,最终找到了我的案例中的问题所在。因此,对于那些有这个问题并且只使用Omniauth而不使用Devise的人来说,问题的根本原因可能是重定向的路径不正确。
- 检查您的服务器开发.log
- 查找重定向位置(grep通过"重定向到")
- 要点如下:检查日志中的回调URL是否正确
在我的例子中,在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"
所以我能够解决这个问题。我的应用程序似乎正在处理facebook身份验证,然后试图再次进行身份验证,结果出现了这个错误。奇怪,因为我试图重定向到root_url。无论如何,在将用户信息存储在数据库中后,将我重定向到的页面从"root_url"更改为"/"似乎起到了很大的作用。
我建议你检查一下你的开发日志,看看你是否遇到了类似的错误。