Ruby on rails 为什么OmniAuth::Strategies::Facebook::NoAuthorizationCodeError未在OmniAuth on_失败回调中处理?
我正在为Rails 3.2.3应用程序使用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
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