18

我一直在为我的 rails 应用程序设置 facebook 身份验证,并且在测试时,使用我的 facebook 帐户登录后,我不断收到此错误:

OAuth2::Error:
{"error":{"message":"This authorization code has been used.","type":"OAuthException","code":100}}

我不确定从哪里开始,但似乎无法在网上找到任何关于它的其他内容。任何指导将不胜感激,如果有用的话,很乐意提供更多信息。

4

6 回答 6

17

我也有这个问题。我看到“(facebook)回调阶段已启动。” 在我的 Rails 日志中出现两次消息。事实证明,我两次初始化 FB 身份验证(我使用的是 Devise 和 Omniauth-Facebook),我猜其中之一是试图重置访问令牌。

禁用 Omniauth-Facebook (config/initializers/omniauth.rb) 中的初始化程序解决了我的问题。

于 2012-12-10T10:37:04.140 回答
7

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

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

您需要更新您的应用程序以解决此问题。

干杯

于 2012-12-03T19:11:01.427 回答
2

此错误发生在上次Facebook 推送之后,并已于今天早上向 facebook报告。

所以我想我们只需要等待,同时,在此报告中发布更多详细信息,并按照它帮助和征求 Facebook 的人来解决这个问题!

于 2012-07-10T10:56:54.570 回答
1

我错误地初始化OmniAuth了两次,调用config/initializers/omniauth.rb了两次。

这将OmniAuth::Builder两次添加到中间件堆栈。随着最近 Facebook 的变化,这开始失败并出现错误100

确保OmniAuth::Builder在我设法解决此问题后添加。

要仔细检查您的中间件堆栈,请运行以下命令:

rake middleware
于 2013-01-02T18:35:20.080 回答
1

我有同样的问题,最后发现我的问题是什么。所以对于那些有这个问题并且只使用 Omniauth 而不使用 Devise 的人来说,问题的根本原因可能是重定向路径不正确。

  1. 检查你的服务器 development.log
  2. 找到它重定向的地方(grep by "Redirected to")
  3. 这里是重点:如果回调 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"
于 2014-03-11T05:53:31.020 回答
0

所以我能够解决这个问题。似乎我的应用程序正在处理 facebook 身份验证,然后再次尝试执行此操作并产生此错误。奇怪,因为我试图重定向到 root_url。在任何情况下,在将用户信息存储在我的数据库中之后,将我重定向到的页面从“root_url”更改为“/”似乎都会有所不同。

我建议检查您的开发日志,看看您是否遇到类似的错误。

于 2012-07-11T02:14:12.403 回答