Facebook 在设备中的\u omniauth\u失败\u路径\u后无法覆盖

Facebook 在设备中的\u omniauth\u失败\u路径\u后无法覆盖,facebook,ruby-on-rails-3,devise,omniauth,Facebook,Ruby On Rails 3,Devise,Omniauth,我有我的类用户::OmniAuthCallbackController{:omniauth\u callbacks=>“users/omniauth\u callbacks”} 用于路由配置的designe_参数,如果没有它,omniauth不知道故障后重定向到哪个控制器 顺便说一句,passthru不是designe的一部分。您可能是自己添加的?我已在我的路由中正确设置了omniauth\u回调控制器。rb但仍然无法覆盖失败或失败后路径方法。问题是,在我有问题的用户模型之前,我有另一个Desi

我有我的类用户::OmniAuthCallbackController
protected
  def after_omniauth_failure_path_for resource
    '/report_failure'
  end
但是超级一号是被叫来的

我怀疑这是因为passthru解决方案:

  devise_for :users do
    get '/users/auth/:provider'  => 'users/omniauth_callbacks#passthru'
  end
有人知道如何克服这个问题吗? 我正在使用Desive 2.0.4

这是日志文件报告:

Started GET "/users/auth/facebook/callback?error_reason=user_denied&error=access_denied&error_description=The+user+denied+your+request." for 77.124.184.115 at 2012-04-19 11:34:46 +0000
Processing by Devise::OmniauthCallbacksController#failure as HTML
  Parameters: {"error_reason"=>"user_denied", "error"=>"access_denied", "error_description"=>"The user denied your request."}
Redirected to http://myapp.com/users/sign_in
Completed 302 Found in 1ms (ActiveRecord: 0.0ms)
编辑:如果我删除passthru重定向,那么它可以工作:

#       def  devise_for :users do
#        get '/users/auth/:provider'  => 'users/omniauth_callbacks#passthru'
#      end

谢谢

您忘记添加
:controllers=>{:omniauth\u callbacks=>“users/omniauth\u callbacks”}
用于路由配置的designe_参数,如果没有它,omniauth不知道故障后重定向到哪个控制器


顺便说一句,passthru不是designe的一部分。您可能是自己添加的?

我已在我的
路由中正确设置了
omniauth\u回调
控制器。rb
但仍然无法覆盖
失败
失败后路径
方法。问题是,在我有问题的用户模型之前,我有另一个Desive用户模型设置,路径为空:

为客户用户设计,路径:“”
# [...]
设计:用户、模块:“用户”#使用模块而不是控制器
这导致在designe-omniauth方法中始终匹配
customer\u-user
映射。因此,默认情况下,故障由designe::OmniAuthCallbackController处理:

Processing by Devise::OmniauthCallbacksController#failure as HTML
可以通过为
客户用户设置非空路径来解决此问题

devise_for :customer_users, path: 'customer'
# or the default
devise_for :customer_users

我希望这有助于防止有人犯同样的错误。

我的routes.rb中有这个重定向,是的,我自己也添加了passthru,根据我看到的许多帖子,我也尝试过这个,但它不起作用,似乎您无法像那样覆盖omniauth_回调类。您的错误消息告诉您Desive甚至没有使用您的
OmniAuthCallbackController
,而是使用自己的。我认为@the8472是对的。您发布的代码没有显示您的设置
:omniauth\u callbacks=>“users/omniauth\u callbacks”