Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 为什么OmniAuth::Strategies::Facebook::NoAuthorizationCodeError未在OmniAuth on_失败回调中处理?_Ruby On Rails_Ruby On Rails 3_Callback_Omniauth - Fatal编程技术网

Ruby on rails 为什么OmniAuth::Strategies::Facebook::NoAuthorizationCodeError未在OmniAuth on_失败回调中处理?

Ruby on rails 为什么OmniAuth::Strategies::Facebook::NoAuthorizationCodeError未在OmniAuth on_失败回调中处理?,ruby-on-rails,ruby-on-rails-3,callback,omniauth,Ruby On Rails,Ruby On Rails 3,Callback,Omniauth,我正在为Rails 3.2.3应用程序使用Omniauth 我已经配置了on_故障回调,如下所示 OmniAuth.config.on_failure = Proc.new do |env| UsersController.action(:omniauth_failure).call(env) end 这将处理错误“OmniAuth::Strategies::CallbackError”,而不是“OmniAuth::Strategies::Facebook::NoAuthorization

我正在为Rails 3.2.3应用程序使用Omniauth

我已经配置了on_故障回调,如下所示

OmniAuth.config.on_failure = Proc.new do |env|
  UsersController.action(:omniauth_failure).call(env)
end
这将处理错误“OmniAuth::Strategies::CallbackError”,而不是“OmniAuth::Strategies::Facebook::NoAuthorizationCodeError”

如何处理此错误?显然我不能使用rescue_,因为错误发生在机架级别

有什么想法吗


谢谢

我遇到了同样的问题

根据我拙劣的调查,这似乎是在中实现的策略中的一个缺陷(并且,快速浏览其他几个)。是一篇关于omniauth中异常处理的好文章。上面说

。。。OmniAuth策略[…],如果遇到问题,请调用方法fail!并传入一个描述问题的符号,如:无效的\u凭据及其遇到的异常。失败!方法在出现故障时调用OmniAuth.config.on,并在机架环境中传递(在执行了一些其他操作后,如将异常粘贴到环境中

同样的道理也可以从原始作者善意提供的一篇文章中推断出来。在文章中,它没有被强调,我也没有在维基文档中找到它(但我可能忽略了)


许多策略,包括omniauth facebook,目前都会引发我们在应用程序级别无法再捕捉到的异常情况。

确保您的facebook应用程序不是在“沙箱模式”下运行。

@soundar:我希望它能像广告中那样以这种方式工作

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

@乔恩·戴:为了得到我需要的报告,我不得不为“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
require'newrelic\u rpm'
模块OmniAuth
类生成器<::Rack::Builder
def呼叫(带有错误处理(env)
开始
无错误处理的调用(env)
rescue OmniAuth::Strategies::Facebook::NoAuthorizationCodeError=>error
#营救的时候你想怎么做就怎么做我想向NewRelic报到。
NewRelic::Agent.notice\u错误(error,env)
环境
结束
结束
别名\u方法\u链:调用,:错误\u处理
结束
结束

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

您是否设法解决了此问题。我正在努力抓住这个例外,或者为试图使用应用程序的人创建一个facebook开发者帐户。你可以将它放入初始值设定项中。可能是config/initializers/omniauth.rb