【问题标题】:With Devise, how have two authenticated_root (for two different user models)使用 Devise,如何拥有两个 authenticated_root(针对两个不同的用户模型)
【发布时间】: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


    【解决方案1】:

    我删除了“as::authenticated_root”部分,它工作正常。我在轨道 5.0.2 上。

    下面的链接说“as::authenticated_root”部分是必要的,因为 rails 4 不允许具有相同名称的路由,假设您已经定义了根路由。

    Different '/' root path for users depending if they are authenticated (using devise)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-29
      相关资源
      最近更新 更多