Я использую следующий код для своих маршрутов:
devise_for :user,
:as => '',
:path_names => {
:sign_in => "",
:sign_out => "logout",
:sign_up => "register"
}
Но когда я выхожу из системы и иду, /logout
я получаю следующую ошибку:
Ни один маршрут не соответствует {: action => "new",: controller => "devise / sessions"}
Как мне настроить корневой путь к :sign_in
действию?
ruby-on-rails
ruby-on-rails-3
devise
Логан Бейли
источник
источник
devise_for :users devise_scope :user do authenticated :user do root 'home#index', as: :authenticated_root end unauthenticated do root 'devise/sessions#new', as: :unauthenticated_root end end
Точно так же протестировано на Rails Rails 4.1.0.rc1.
источник
root :to => "devise/sessions#new"
Мне нужно было установить домашний корень по умолчанию. Мне казалось, что я пробовал это всю ночь прошлой ночью (до публикации вопроса), но теперь это работает. Если вы вышли из системы, Devise попытается перенаправить вас на корневой путь, который у меня был undefined.
источник
(Это было опубликовано как предлагаемое изменение , но должно было быть самостоятельным ответом. Я не знаю, имеет ли это смысл или нет. Уважаемый анонимный редактор: не стесняйтесь репостить этот ответ как свой собственный и оставить мне комментарий так что я удалю эту копию.)
root :to => redirect("/users/login")
источник
Я получил это для работы с ответом @VvDPzZ. Но пришлось немного доработать
devise_scope :business_owner do authenticated do root to: 'pages#dashboard' end unauthenticated do root to: 'devise/sessions#new', as: 'unauthenticated_root' end end
Мне пришлось указать
to:
в объявлении корневого пути. Я также удалил,as: :authenticated_root
потому что в моем приложении уже были ссылкиroot_path
в некоторых местах . Путем исключенияas: :authenticated_root
части мне не пришлось менять ни одну из моих существующих ссылок.источник
Я думаю, у вас разные роли пользователей. Если вам нужно добавить такую область видимости к ресурсу пользователей:
devise_scope :user do get "/logout" => "devise/sessions#destroy" end
Вы можете узнать больше о переопределении маршрутов разработки здесь: https://github.com/plataformatec/devise/wiki/How-To:-Change-the-default-sign_in-and-sign_out-routes
источник
Некоторые из этих решений слишком сложны. Просто используйте Rails:
Добавьте
'get' 'users/root', to: 'users#root'
в config / routes.rb.В UsersController сделайте что-нибудь вроде:
def root if user_signed_in? redirect_to root_for_signed_in_user_path (or whatever) else redirect_to new_user_session_path end end
источник
Используя rails 3.2 и devise 3.2.3, мне удалось настроить мою домашнюю страницу « home # index » (действие контроллера) в качестве страницы входа в систему, внося следующие изменения.
# 1 Добавлена форма входа на главную страницу:
<%= simple_form_for(resource, as: resource_name, url: session_path(resource_name)) do |f| %> <%= f.input :email %> <%= f.input :password %> <%= f.button :submit %> <% end %>
# 2 Добавлены методы resource_name, resource и devise_mapping в app / holdingpers / application_helper.rb :
def resource_name :user end def resource @resource ||= User.new end def devise_mapping @devise_mapping ||= Devise.mappings[:user] end
# 3 Создал пользовательский контроллер сессий app / controllers / users / sessions_controller.rb :
class Users::SessionsController < Devise::SessionsController protected # This method tell sessions#create method to redirect to home#index when login fails. def auth_options { scope: resource_name, recall: 'home#index' } end end
# 4 Пропустите маршруты сеансов и настройте пользовательский контроллер сеансов в config / routes.rb :
devise_for :users, path: 'auth', skip: [:sessions], controllers: { sessions: 'users/sessions' } as :user do get 'auth/sign_in' => 'home#index', as: :new_user_session post 'auth/sign_in' => 'users/sessions#create', as: :user_session delete 'auth/sign_out' => 'users/sessions#destroy', as: :destroy_user_session end
источник