【问题标题】:OmniAuth Invalid Response ErrorOmniAuth 无效响应错误
【发布时间】:2011-04-03 07:02:55
【问题描述】:

我将 OmniAuth 与 Devise 一起使用,以允许用户使用 facebook 登录或使用用户名和密码创建一个普通帐户。当我最初设置它时,我使用了来自Railscasts 的优秀指导。两个多月以来,一切都运行良好,但就在前几天,facebook 登录停止工作。 OmniAuth 将您发送到使用 facebook 进行身份验证,然后返回:http://localhost:3000/auth/failure?message=invalid_response

Google 对导致此错误的原因或如何修复它没有任何建议,而 OmniAuth 文档也没有。我也尝试过挖掘他们的代码,但我发现的这个错误唯一提到的是这个,在/oa-oauth/lib/omniauth/strategies/oauth.rb:

rescue ::MultiJson::DecodeError => e
  fail!(:invalid_response, e)
end

有没有人见过这个错误!?知道它是什么或如何解决它?!这使我无法启动此应用程序,因此非常感谢您的帮助!

谢谢, 杰哥

【问题讨论】:

  • 尝试在服务器上重新同步时间?
  • 不是问题。我们在 heroku 上,所以服务器时间不在我们的控制范围内(我也不认为这会导致这个错误)。

标签: ruby-on-rails devise omniauth


【解决方案1】:

我在同样的情况下也遇到过这个错误。 Devise 正在抢救一个不相关的异常并将其作为身份验证失败处理。我通过在控制器中处理异常来抢占设计:

  # authentications_controller.rb
  def create
    omniauth = request.env["omniauth.auth"]
    # Blah
    # blah
    # Blark!
  rescue Exception => e
    # Just spit out the error message and a backtrace.
    render :text => "<html><body><pre>" + e.to_s + "</pre><hr /><pre>" + e.backtrace.join("\n") + "</pre></body></html>"

【讨论】:

    【解决方案2】:

    对于通过谷歌找到这个的其他人来说,heroku_backup_task 是我的罪魁祸首。当我们将它添加到我们的 gemfile 时,OmniAuth 解码失败导致这个错误。我认为这是一些 json 冲突。

    不知道为什么它不会在 1.9.2 上发生,但我可以确认升级到 1.9.2 可以修复它,但如果您的所有 gem 不能正常运行,并且降级 heroku,可能会导致您的应用程序出现其他问题看来是不行了。既然我发现了这个问题,我将不得不销毁并重新创建我的应用程序。

    【讨论】:

      【解决方案3】:

      好的,

      我不确定为什么这会奏效,但它确实有效,因此我将在此处发布以帮助其他最终解决此问题的人。

      我升级了我的应用程序以使用 ruby​​ 1.9.2(未来的方式!),砰,它又能正常工作了。不知道为什么,但有时就是这样。

      不过升级真的很容易。这个dhh tweet 激发了我的升级行动,并发现this 和this 是确保您的1.8.7 代码在1.9.2 中工作的真正有用的资源。对 heroku 的支持以及让升级应用变得如此容易。

      【讨论】:

      • 升级到 ruby​​ 1.9.2 对我也有帮助。
      【解决方案4】:

      我遇到了同样的问题,我想我找到了解决方案。 在教程中,RailsCast #235 给出了 authentications_controller.rb

      def create
        auth = request.env["rack.auth"]
        current_user.authentications.find_or_create_by_provider_and_uid(auth['provider'],
                                                                        auth['uid'])
        flash[:notice] = "Authentication successful."
        redirect_to authentications_url
      end
      

      但是,

      auth = request.env["rack.auth"]
      

      在omniouth 0.2.3中不再存在

      auth = request.env["omniauth.auth"]
      

      是正确的。

      【讨论】:

        【解决方案5】:

        好的,所以,很抱歉发布这样一个老问题,但是在遵循 Railscasts 教程之后,我得到了同样的错误。我得出的结论是,omniauth-twitter gem 的错误处理导致了混乱,因为它隐藏了潜在的错误。我通过将omniauth-facebook gem 添加到我的应用程序并使用它进行身份验证来解决了这个问题。

        这很快发现了我的应用程序中的根本错误,即我将 User.create_with_omniauth 方法放入用户控制器而不是模型中,这是一个新手错误,但很容易解决。

        我的错误很简单,而且有些无关紧要,通过使用 facebook gem,错误处理让我能够理解问题并快速解决。如果您正在为这个问题而苦苦挣扎,请尝试使用 facebook 或其他提供商,看看您是否可以更轻松地解决根本问题,并且肯定会避免一些更复杂的问题,例如升级到 ruby​​!

        【讨论】:

          猜你喜欢
          • 2018-03-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-02-23
          • 1970-01-01
          相关资源
          最近更新 更多