【问题标题】:Cannot override after_omniauth_failure_path_for in Devise无法在设计中覆盖 after_omniauth_failure_path_for
【发布时间】:2012-04-19 11:49:00
【问题描述】:

我有我的班级 Users::OmniauthCallbacksController

protected
  def after_omniauth_failure_path_for resource
    '/report_failure'
  end

但 super 是被调用的那个。

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

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

有人知道如何解决这个问题吗? 我正在使用设计 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)

编辑:如果我删除直通重定向,那么它可以工作:

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

谢谢

【问题讨论】:

  • 您的错误消息告诉您,Devise 甚至没有使用您的OmniauthCallbacksController,它使用的是自己的。我认为@the8472 是对的。您发布的代码未显示您设置:omniauth_callbacks => "users/omniauth_callbacks"

标签: facebook ruby-on-rails-3 devise omniauth


【解决方案1】:

我在routes.rb 中正确设置了omniauth_callbacks 控制器,但仍然无法覆盖failureafter_omniauth_failure_path_for 方法。问题是在我有问题的用户模型之前,我有另一个设计用户模型设置,路径为空:

devise_for :customer_users, path: ''
# [...]
devise_for :users, module: 'users' # using a module instead of controllers

这导致始终匹配this 设计omniauth 方法中的customer_user 映射。因此,默认情况下会处理失败Devise::OmniauthCallbacksController

Processing by Devise::OmniauthCallbacksController#failure as HTML

可以通过为customer_users 设置非空路径来解决此问题:

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

如果有人犯同样的错误,我希望这会有所帮助。

【讨论】:

    【解决方案2】:

    您忘记添加:controllers => { :omniauth_callbacks => "users/omniauth_callbacks" } devise_for 路由配置的参数,没有它,omniauth 不知道在失败后重定向到哪个控制器。

    顺便说一句,passthru 不是设计的一部分。应该是你自己加的吧?

    【讨论】:

    • 我的 routes.rb 中有这个重定向,是的,根据我看到的许多帖子,我自己添加了 passthru
    • 这个我也试过了,还是不行,好像不能这样覆盖omniauth_callbacks类。
    猜你喜欢
    • 1970-01-01
    • 2012-03-15
    • 2015-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 2022-01-22
    • 1970-01-01
    相关资源
    最近更新 更多