2

我将 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

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

谢谢,JG

4

5 回答 5

3

在同样的情况下,我也遇到了这个错误。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>"
于 2011-05-02T05:44:52.810 回答
2

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

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

于 2011-04-07T04:51:53.227 回答
1

行,

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

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

不过升级真的很容易。这条 dhh 推文激起了我的升级行动,并发现对于确保您的 1.8.7 代码在 1.9.2 中工作非常有用的资源。对 heroku 的支持以及使升级应用程序变得如此容易。

于 2011-04-04T06:44:38.420 回答
1

我有同样的问题,我想我找到了解决方案。在教程中,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"]

是正确的。

于 2011-04-21T18:25:25.180 回答
1

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

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

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

于 2011-12-20T21:38:20.407 回答