【问题标题】:why OmniAuth::Strategies::Facebook::NoAuthorizationCodeError is not handled in omniauth on_failure callback?为什么 OmniAuth::Strategies::Facebook::NoAuthorizationCodeError 在omniauth on_failure 回调中没有处理?
【发布时间】:2012-06-20 12:54:38
【问题描述】:

我正在使用 Omniauth for Rails 3.2.3 应用程序。

我已经配置了 on_failure 回调,如下所示。

OmniAuth.config.on_failure = Proc.new do |env|
  UsersController.action(:omniauth_failure).call(env)
end

这会处理错误“OmniAuth::Strategies::CallbackError”,而不是“OmniAuth::Strategies::Facebook::NoAuthorizationCodeError”。

如何处理这个错误?我不能使用rescue_from,因为错误发生在机架级别。

有什么想法吗?

谢谢

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 callback omniauth


    【解决方案1】:

    确保您的 Facebook 应用程序未在“沙盒模式”下运行

    【讨论】:

    • 或为尝试使用该应用的人创建一个 Facebook 开发者帐户
    【解决方案2】:

    我也遇到了同样的问题。

    根据我的谦虚调查,这似乎是omniauth-facebook gem 中实施的策略中的一个错误(并且,快速浏览了其他几个)。 This 是一篇关于omniauth 异常处理的好文章。它说

    ... OmniAuth 策略[...],如果遇到问题,调用方法失败!并传入一个描述问题的符号,例如 :invalid_credentials 和他们遇到的异常。失败!方法最终调用 OmniAuth.config.on_failure 并传入 Rack 环境(在做了一些其他事情之后,比如将异常粘贴到环境中......

    同样可以从原作者提供的example 中推断出来。在source 中没有强调它,我也没有在 wiki 文档中找到它(但我可能忽略了)。

    包括 omniauth-facebook 在内的许多策略目前都会引发我们无法再在应用级别捕获的异常。

    【讨论】:

    • 你有没有设法解决这个问题。我正在努力捕捉这个异常
    【解决方案3】:

    @soundar:我希望它像宣传的那样以这种方式工作。

    @fastcatch:正如您所指出的,这些策略没有正确处理这些失败案例。

    @Jon Day:我必须为 'omniauth-facebook' (1.4.0) 修补 Rack 应用程序才能获得我需要的报告:

    require 'newrelic_rpm'
    
    module OmniAuth
      class Builder < ::Rack::Builder
    
        def call_with_error_handling(env)
          begin
            call_without_error_handling(env)
          rescue OmniAuth::Strategies::Facebook::NoAuthorizationCodeError => error
            # Do whatever you'd like when rescuing.. I wanted to report to NewRelic.
            NewRelic::Agent.notice_error(error, env)
            env
          end
        end
    
        alias_method_chain :call, :error_handling
    
      end
    end
    

    我对这段代码并不感到自豪,但它是控制该异常的一种方法;)。

    【讨论】:

    • 你可以把它放在初始化器中。也许是 config/initializers/omniauth.rb
    猜你喜欢
    • 1970-01-01
    • 2013-03-05
    • 2022-08-18
    • 2012-11-05
    • 1970-01-01
    • 1970-01-01
    • 2014-02-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多