我在使用引擎正确设置Devise方面遇到了一些麻烦。
在我的引擎中,我有:
config/initializers/devise.rb
config.router_name = :portal_core
config/routes.rb
devise_for :users, class_name: 'PortalCore::User', module: :devise
app/models/portal_core/user.rb
module PortalCore
class User < ApplicationRecord
...
devise :database_authenticatable, :trackable, :confirmable,
:recoverable, :rememberable, :validatable, :lockable
end
end
我所有的测试都在这里通过。 然后,在我的主机应用程序之一中:
config/routes.rb
devise_for :admin_users, class_name: 'AdminUser'
app/models/admin_user.rb
class User < ApplicationRecord
...
devise :database_authenticatable, :trackable,
:recoverable, :rememberable, :validatable
end
当我在主机应用程序中运行此测试时:
context "When not logged in" do
it "redirect to new user session when try to access index" do
process :index, method: :get, params:{}
expect(response).to redirect_to(new_admin_user_session_path)
end
end
我收到此错误: NoMethodError: 未定义的方法`portal_core&#39; for #Devise :: FailureApp:0x0000000008c9f1f0&gt;
如果我在主机应用程序中安装引擎路由:
mount PortalCore::Engine => '/portal_core'
然后我收到了这个错误:预期的响应是重定向到http://test.host/admin_users/sign_in,但重定向到http://test.host/。
如果我尝试启动服务器,它会继续使用 401 Unauthorized重定向
可能缺少一些配置,但我无法弄清楚是什么。
答案 0 :(得分:0)
所以,我不知道这是解决方案还是只是解决方法。
在主机app设计初始化程序中,我将router_name设置为nil:
config.router_name = nil
它起作用了。
欢迎任何其他解决方案!
谢谢!