Rails: разработайте after_sign_in_path для нескольких маршрутов ресурсов к корню - PullRequest
0 голосов
/ 08 февраля 2019

Я работаю над приложением каталога библиотеки, которое аутентифицирует администраторов и пользователей.Почему-то я не могу установить after_sign_in_path_for, так как вход в систему теперь направляется к общедоступному корню, а не к корню каждого пространства имен.

Я уже внедрил пространство имен администратора и аутентификацию администратора, и все работало.Чтобы настроить путь выхода из системы, я добавил:

# Overwriting the sign_out redirect path method
def after_sign_out_path_for(resource_or_scope)
  if resource_or_scope == :user
    collection_path
  elsif resource_or_scope == :admin
    new_admin_session_path
  else
    root_path
  end
end

Я уже включил область действия пользователя в этот раздел, даже если я еще не реализовал ресурс.Все работало.

Теперь я хочу добавить пользовательский ресурс и пространство имен коллекции, где размещен каталог.Так как теперь мне нужно указать перенаправление after sign_in, я заполнил application_controller.rb:

# Overwriting the sign_in redirect path method
def after_sign_in_path_for(resource_or_scope)
  if resource_or_scope == :user
    collection_opac_path
  elsif resource_or_scope == :admin
    admin_root_path
  else
    root_path
  end
end

Каким-то образом я теперь перенаправлен в основной корень вместо collection_opac_path или admin_root_path.Последний работал до определения after_sign_in_path.

В моем route.rb у меня есть следующие записи:

devise_for :users
devise_for :admins

namespace :collection do
  match '/',                          :to => 'opac#home'
  match '/opac',                      :to => 'opac#opac', :as => :opac
  root :to => 'opac#home'
end

namespace :admin do
  ...
  root :to => 'pages#pageadmin'
end

root :to => 'pages#manifesto'

Администратор аутентифицирован на всех контроллерах пространства имен администратора.Пользователь проходит проверку подлинности при действии opac контроллера opac в пространстве имен коллекции.

rake routes дает:

     collection    /collection(.:format)       collection/opac#home
collection_opac    /collection/opac(.:format)  collection/opac#opac
collection_root    /collection(.:format)       collection/opac#home

     admin_root    /admin(.:format)            admin/pages#pageadmin
           root    /                           pages#manifesto

Что я делаю неправильно?Как мне заставить это работать?

Заранее спасибо!

Обновление

Я думаю, что важно указать, что форма входа пользователя размещается в представлении коллекции / дома и после отправки и входа в систему должна перенаправлять в коллекцию / opac, а форма входа администраторапоявляется при попытке доступа к корню пространства имен администратора.

1 Ответ

0 голосов
/ 08 февраля 2019

Я добавил:

def after_sign_in_path_for(resource)
 stored_location_for(resource) ||
  if resource.is_a?(User)
    collection_opac_path
  elsif resource.is_a?(Admin)
    admin_root_path
  else
    super
  end
end

адаптируя то, что указано в devisegem/lib/devise/controllers/helpers.rb, и теперь условные маршруты работают.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...