2011-07-22 14 views
6

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!

Odpowiedz

3

Można zrobić coś takiego:

session[:return_to] ||= request.referer 
+1

Wystarczy popatrzeć na http://stackoverflow.com/questions/2139996/ruby-on-rails-redirect-toback – Swift

+0

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

+1

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

Powiązane problemy