2017-02-01 3 views
1

Приложение My Rails 5 использует Devise 4.2 для обработки аутентификации для типов пользователей Admin и Agent (отдельные таблицы). Это все работает, за исключением того, что корень отличается от зарегистрированного в Admin vs AgentС Devise, как два аутентифицированных_root (для двух разных моделей пользователей)

В routes.rb Я могу установить authenticated_root для: admin ИЛИ: пользователя, но выполнение обоих (как показано ниже) вызывает ошибку, когда приложение запущено: 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 

Должен ли я, возможно, использовать какой-то лямбда установить 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

Я удалил «как:: authenticated_root» часть и она отлично работает. Я на рельсах 5.0.2.

В приведенной ниже ссылке часть «as:: authenticated_root» необходима только потому, что рельсы 4 не разрешают маршруты с одинаковым именем, если у вас уже установлен корневой маршрут.

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

Смежные вопросы