Rails 2.3.11przekierowanie do oryginalnego miejsca po zalogowaniu się
Jeśli użytkownik próbuje przejść do/zdjęć, gdy nie jesteś zalogowany, są one skierowane do [site]/admin/login?route=[site]/photos
. Po zalogowaniu się, chcę je wysłać do tego, co zostało zdefiniowane w "trasie" zamiast domyślnej strony głównej.
W /app/controllers/admin_controller.rb:
def login
if session[:user_id] #already logged in
redirect_to ''
@destination = request.url
end
if request.post?
if [authentication code]
if user.activated? #check to see whether the user has activated their account
session[:user_id] = user.id
if params[:route] # ********
redirect_to "#{params[:route]}"
else
redirect_to :controller => 'home'
end
else
flash.now[:notice] = "Your account hasn't been activated yet. Check your emails!"
end
else
flash.now[:notice] = "Invalid email/password combination"
end
end
end
W "*" linia ed jest ten, który nie działa poprawnie. Kiedy sprawdzam, aby zobaczyć parametry,: trasa nie jest wśród nich, więc argument nie jest przekazywany z postem logowania. Czy ktoś może mi wyjaśnić, dlaczego tak nie jest i jak mogę to naprawić?
Dziękujemy!
Wystarczy popatrzeć na http://stackoverflow.com/questions/2139996/ruby-on-rails-redirect-toback – Swift
To wygląda tak, jak powinien załatwić sprawę , ale wciąż jestem całkiem nowy w Railsach, więc czy mógłbyś uprzejmie wyjaśnić, gdzie powinienem to umieścić? Czy przejdzie to w moim kontrolerze aplikacji (gdzie przekierowuje odwiedzających, którzy nie są zalogowani na stronę logowania) lub gdzieś w metodzie zamieszczonej powyżej? Dzięki! – Benjin
Dziękuję; to działało (kiedy to rozgryzłem)! Dla wszystkich innych, co musiałem zrobić, to: Mam before_filter, który kieruje do metody autoryzacji: 'def autoryzować chyba że logged_in? sesji [: original_target] = request.request_uri błysk [: obwieszczenie] = "Musisz być zalogowany, aby zobaczyć tę stronę" redirect_to home_url końcowy end' Następnie w moim kontroler logowania, po uwierzytelnieniu użytkownika, sprawdź, czy coś jest zapisane w sesji [: original_target] i, jeśli jest, przejdź do tego. – Benjin