OmniAuth响应错误无效

时间:2011-04-03 07:02:56

标签: ruby-on-rails devise omniauth

我正在使用OmniAuth with Devise允许用户使用facebook登录或使用用户名和密码创建普通帐户。当我最初设置它时,我使用了Railscasts的优秀指示。一切都很好地工作了2个多月,但就在前一天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

5 个答案:

答案 0 :(得分:3)

我在同样的情况下遇到过这个错误。 Devise正在拯救一个不相关的异常并将其作为auth失败处理。我通过在控制器中处理异常来取代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>"

答案 1 :(得分:2)

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

不确定为什么它不会在1.9.2上发生,但我可以确认升级到1.9.2修复了它,但如果你的所有宝石都不好玩,可能会在你的应用中引起其他问题,并降级heroku似乎是一个禁忌。我已经发现了这个问题,我将不得不销毁并重新创建我的应用程序。

答案 2 :(得分:1)

好的,

我不确定为什么这样做有效但是我已经发布了这里,以便帮助其他人最终解决这个问题。

我升级了我的应用程序以使用ruby 1.9.2(未来的方式!)并且爆炸,它再次起作用。不知道为什么,但有时嘿,这就是它的方式。

升级非常简单。我被dhh tweet&amp;发现thisthis是确保您的1.8.7代码在1.9.2中有效的非常有用的资源。支持heroku的道具以及升级应用程序非常容易。

答案 3 :(得分: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"]
omn​​iouth 0.2.3中不再存在

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

是对的。

答案 4 :(得分:1)

好的,所以,很抱歉发布这么老的问题,但是为了这个我跟着Railscasts教程我得到了同样的错误。我得出结论,omniauth-twitter gem的错误处理引起了混乱,因为它隐藏了潜在的错误。我通过将omniauth-facebook gem添加到我的应用程序并使用此进行身份验证来解决了这个问题。
这很快发现了我的应用程序中的根错误,即我将User.create_with_omniauth方法放入用户控制器而不是模型,这是一个新手错误,但很容易解决。

我的错误很容易,而且有点无关紧要,通过使用facebook gem,错误处理让我能够理解问题并快速解决。如果您正在努力解决这个问题,请尝试使用Facebook或其他提供商,看看您是否可以更轻松地解决根本问题,并且当然可以避免一些更复杂的问题,例如升级到ruby!