【发布时间】:2017-02-01 20:53:15
【问题描述】:
My Rails 5 应用程序使用 Devise 4.2 来处理 Admin 和 Agent 用户类型(单独的表)的身份验证。一切正常,除了登录的管理员和代理的 root 不同
在 routes.rb 中,我可以为 :admin 或 :user 设置authenticated_root,但同时执行(如下所示)会导致应用启动时出现错误: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
【问题讨论】:
标签: ruby-on-rails devise