My Rails 5应用程序使用Devise 4.2处理管理员和代理用户类型(单独的表)的身份验证。除了让登录的管理员与代理
的根目录不同之外,它一切正常在routes.rb中,我可以将authenticated_root设置为:admin OR:user,但同时执行这两项操作(如下所示)会导致应用程序启动时出错:ArgumentError: Invalid route name, already in use: 'authenticated_root'
似乎Rails忽略了authenticated_root的两种用法发生在两种不同的场景中。
# routes.rb
devise_for :agents, :skip => [:registrations]
as :agent do
get 'agents/edit' => 'devise/registrations#edit', :as => 'edit_agent_registration'
put 'agents' => 'devise/registrations#update', :as => 'agent_registration'
end
devise_for :admins, :skip => [:registrations]
as :admin do
get 'admins/edit' => 'devise/registrations#edit', :as => 'edit_admin_registration'
put 'admins' => 'devise/registrations#update', :as => 'admin_registration'
end
authenticated :admin do
root 'pages#adminhome', as: :authenticated_root
end
authenticated :agent do
root 'pages#agenthome', as: :authenticated_root
end
我是否应该使用某种lambda来设置authenticated_root而不是记录的常规方法,并在上面使用?
我尝试了这种方法,但得到了同样的错误:
root :to => 'pages#adminhome', :constraints => lambda { |request| request.env['warden'].user.class.name == 'Admin' }, as: :authenticated_root
root :to => 'pages#agenthome', :constraints => lambda { |request| request.env['warden'].user.class.name == 'Agent' }, as: :authenticated_root
答案 0 :(得分:1)
我删除了“as :: authenticated_root”部分,它运行正常。我在轨道5.0.2上。
下面的链接说“as :: authenticated_root”部分是必要的,因为rails 4不允许具有相同名称的路由,假设您已经定义了根路由。
Different '/' root path for users depending if they are authenticated (using devise)