Ruby on rails 设计错误的重定向

Ruby on rails 设计错误的重定向,ruby-on-rails,ruby-on-rails-4,devise,rails-engines,Ruby On Rails,Ruby On Rails 4,Devise,Rails Engines,我有一个带有用户模型的应用程序,并且有以下路径: devise_for :users, path: 'account', path_names: { sign_in: 'login', sign_out: 'logout' }, controllers: { registrations: 'registrations' } devise_for :admin_users, class_name: "MyEngine::AdminUser", module: :devise, pat

我有一个带有
用户
模型的应用程序,并且有以下路径:

devise_for :users, path: 'account',
  path_names: { sign_in: 'login', sign_out: 'logout' },
  controllers: { registrations: 'registrations' }
devise_for :admin_users, class_name: "MyEngine::AdminUser", module: :devise,
  path: '', path_names: {sign_in: 'login', sign_out: 'logout'},
  controllers: { registrations: 'my_engine/registrations' }
以及一个安装在“/admin”上的可安装引擎,具有
AdminUser
型号和以下路径:

devise_for :users, path: 'account',
  path_names: { sign_in: 'login', sign_out: 'logout' },
  controllers: { registrations: 'registrations' }
devise_for :admin_users, class_name: "MyEngine::AdminUser", module: :devise,
  path: '', path_names: {sign_in: 'login', sign_out: 'logout'},
  controllers: { registrations: 'my_engine/registrations' }
在engines应用程序控制器中,我有
before\u filter:authenticate\u admin\u user错误地重定向到主应用程序根路径,而不是管理员登录(或任何登录)页面,给出:

已完成401次未授权

为什么这样做而不要求管理员用户登录?

您是否尝试过:

#config/routes.rb
devise_for :admin_users, class_name: "MyEngine::AdminUser", module: :devise,
  path: '', path_names: {sign_in: 'login', sign_out: 'logout'},
  controllers: { registrations: 'my_engine/registrations', sessions: "my_enging/sessions" }

#app/controllers/admin/sessions_controller.rb
class Admin::SessionsController < ::Devise::SessionsController

    protected

    #Logout Path
    def after_sign_out_path_for(resource_or_scope)
        admin_root_path
    end

    #Login Path (if already logged in)
    def after_sign_in_path_for(resource)
        admin_root_path
    end

end
#config/routes.rb
为管理员用户设计,类名:“MyEngine::AdminUser”,模块::设计,
路径:'',路径名称:{登录:'login',注销:'logout'},
控制器:{注册:“我的引擎/注册”,会话:“我的引擎/会话”}
#app/controllers/admin/sessions\u controller.rb
类管理员::会话控制器<::设计::会话控制器
受保护的
#注销路径
签出路径后的定义(资源或范围)
管理根路径
结束
#登录路径(如果已登录)
在(资源)的路径中签名后定义
管理根路径
结束
结束

我不得不在主应用程序路径中添加设计路径,并稍微更改了登录/注销路径:

devise_for :admin_users, class_name: "MyEngine::AdminUser", module: :devise,
  path: '', path_names: {sign_in: 'admin/login', sign_out: 'admin/logout'},
  controllers: { registrations: 'my_engine/registrations' }

我仍然认为应该有一种方法可以在gem内部完成这一切,但这现在起作用了…

Hi Rich,这并不是真正的问题,问题是我甚至无法登录资源,所以这些都没有受到影响。嗯,我很好。值得提供代码供将来参考:)自从你提出这个问题以来,你有什么进展吗?刚刚发布了我的“解决方案”: