Używam następującego kodu dla moich tras:
devise_for :user,
:as => '',
:path_names => {
:sign_in => "",
:sign_out => "logout",
:sign_up => "register"
}
Ale kiedy jestem wylogowany i dostaję się, pojawia /logout
się następujący błąd:
Żadna trasa nie pasuje {: action => "new",: controller => "devise / session"}
Jak ustawić ścieżkę główną do :sign_in
działania?
ruby-on-rails
ruby-on-rails-3
devise
Logan Bailey
źródło
źródło
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
Dokładnie tak, testowane na Rails Rails 4.1.0.rc1.
źródło
root :to => "devise/sessions#new"
Musiałem ustawić domyślny katalog główny. Czułem się, jakbym próbował tego całą noc wczoraj (przed opublikowaniem pytania), ale teraz działa. Jeśli jesteś wylogowany, Devise spróbuje przekierować Cię do ścieżki głównej, której nie zdefiniowałem.
źródło
(Zostało to opublikowane jako sugerowana zmiana , ale powinna była być odpowiedzią samą w sobie. Nie wiem, czy to ma sens, czy nie. Drogi anonimowy redaktorze: nie krępuj się opublikować ponownie tę odpowiedź jako własną i zostaw komentarz więc usunę tę kopię.)
root :to => redirect("/users/login")
źródło
Mam to do pracy z odpowiedzią @VvDPzZ. Ale musiałem to nieco zmodyfikować
devise_scope :business_owner do authenticated do root to: 'pages#dashboard' end unauthenticated do root to: 'devise/sessions#new', as: 'unauthenticated_root' end end
Musiałem umieścić reklamę
to:
w deklaracji ścieżki głównej. Usunąłem również,as: :authenticated_root
ponieważ miałem już kilka miejsc w mojej aplikacji odwołujących sięroot_path
do linków. Pomijając tęas: :authenticated_root
część, nie musiałem zmieniać żadnego z moich istniejących linków.źródło
Myślę, że masz różne role użytkowników. Jeśli musisz dodać taki zakres do zasobów użytkowników:
devise_scope :user do get "/logout" => "devise/sessions#destroy" end
Możesz przeczytać więcej o zastępowaniu tras opracowanych tutaj: https://github.com/plataformatec/devise/wiki/How-To:-Change-the-default-sign_in-and-sign_out-routes
źródło
Niektóre z tych rozwiązań są zbyt skomplikowane. Po prostu użyj Rails:
Dodaj
'get' 'users/root', to: 'users#root'
do config / tours.rb.W UsersController zrób coś takiego:
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
źródło
Używając rails 3.2 i devise 3.2.3 udaje mi się ustawić moją stronę domową " home # index " (kontroler # action) jako stronę logowania, wprowadzając następujące zmiany.
# 1 Dodano formularz logowania do strony głównej:
<%= 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 Dodano metody nazwa_zasobu, zasób i odwzorowanie_wyrządzenia do pliku app / holdpers / application_helper.rb :
def resource_name :user end def resource @resource ||= User.new end def devise_mapping @devise_mapping ||= Devise.mappings[:user] end
# 3 Utworzono niestandardową aplikację kontrolera sesji / controllers / users / session_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 Pomiń trasy sesji i skonfiguruj kontroler sesji niestandardowych w config / tours.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
źródło