Czy istnieje sposób w Devise 1.0, bibliotece dla Rails 2.3, aby przekierować się pod konkretny URL, a nie root_url po zalogowaniu?Przekierowanie do określonego adresu URL po zalogowaniu
EDIT: Zapomniałem wspomnieć, że to Devise 1,0
Czy istnieje sposób w Devise 1.0, bibliotece dla Rails 2.3, aby przekierować się pod konkretny URL, a nie root_url po zalogowaniu?Przekierowanie do określonego adresu URL po zalogowaniu
EDIT: Zapomniałem wspomnieć, że to Devise 1,0
Myślę, że metoda opracować after_sign_in_path_for
jest to, czego szukasz.
Zdefiniuj tę metodę w aplikacji ApplicationController i spowoduje przekroczenie domyślnej implementacji Devise. To właśnie określa dokumentacja.
Szczegóły tutaj: http://rdoc.info/github/plataformatec/devise/master/Devise/Controllers/Helpers:after_sign_in_path_for
Są szanse, że użytkownik jest przekierowywany przed after_sign_in_path
nazywa. Dzieje się tak, gdy użytkownik próbuje przejść bezpośrednio do strony chronionej przez uwierzytelnianie. Dzieje się tak przez cały czas, jeśli masz chronione root_path
("/") przez uwierzytelnianie.
Jest tam dyskusja na grupach google na ten temat:
Szybki i brudny rozwiązaniem jest zastąpienie stored_location_for
zawsze powrócić nil
tak:
class ApplicationController < ActionController::Base
...
private
def stored_location_for(resource_or_scope)
nil
end
def after_sign_in_path_for(resource_or_scope)
my_favorite_path
end
end
Jako niewielką odmianę tego, zwracam tylko zero z adresu stored_location_for, jeśli pasuje do "/", która jest moją domyślną trasą. W ten sposób przejdą one do after_sign_in_path tylko wtedy, gdy nie będą wyraźnie próbowali przejść gdzie indziej. Aby to zrobić, zamień zerem na "(location = super) == '/"? Nil: location ". –
Przypuśćmy, że po zalogowaniu się chcesz wyświetlić pulpit użytkownika.
class HomesController < ApplicationController
def index
if current_user //returns nil if not logged in
@users = User.all
render :dashboard
end
end
def dashboard
@users = User.all
end
end
w routes.rb:
root :to => 'homes#index'
Jeśli zalogowany, jeśli blok jest wprowadzony w działanie indeksu i dashboard.erb staje się. (pamiętaj, aby zainicjować wszystkie zmienne wymagane przez dashboard.erb, w bloku if) W przeciwnym razie szyny renderują index.erb
Zapomniałem wspomnieć w Devise 1.0, a nie 1.1. – Pablo
after_sign_in_path_for w ogóle nie jest wywoływana w wersji 1.0.8. – Pablo
Patrząc na SessionsController Devise, po pomyślnym zalogowaniu następuje wywołanie sign_in_and_redirect. To przekierowanie do poprzedniej lokalizacji zapisanej w sesji. Jeśli nie zapisano żadnej lokalizacji, wywoływana jest funkcja after_sign_in_path_for. Czy użytkownik loguje się na (lub za pośrednictwem) strony głównej? To może wyjaśnić, dlaczego zawsze tam się przekierowuje. – Sidane