2011-07-22 14 views
6

rieles 2.3.11Redirigir a destino original después de entrar en

Si un usuario intenta ir a/fotos cuando no se ha identificado, que se dirigen a [site]/admin/login?route=[site]/photos. Después de iniciar sesión, me gustaría que se envíen a lo que se definió en "ruta" en lugar de a la página de inicio predeterminada.

En /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 

La línea ed "*" es aquel que no está funcionando correctamente. Cuando compruebo para ver los parámetros,: route no está entre ellos, por lo que el argumento no se transfiere con la publicación de inicio de sesión. ¿Alguien puede explicarme por qué no lo está y cómo podría solucionarlo?

¡Gracias!

Respuesta

3

Se podría hacer algo como:

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

Tenga una mirada en http://stackoverflow.com/questions/2139996/ruby-on-rails-redirect-toback – Swift

+0

Esta parece que debería hacer el truco , pero todavía soy bastante nuevo en Rails, ¿podrías explicarnos un poco sobre dónde debería poner eso? ¿Saldría en mi controlador de aplicaciones (donde redirecciona a los visitantes que no han iniciado sesión en la página de inicio de sesión) o en algún lugar del método publicado anteriormente? ¡Gracias! – Benjin

+1

Gracias; ¡Eso funcionó (una vez que lo descubrí)! Para todos los demás, lo que llegó a tener que hacer era esto: Have a before_filter que dirige a un método de autorización: 'def autorizar menos logged_in? sesión [: original_target] = request.request_uri rápida [: aviso] = "Debe estar registrado para ver esa página" redirect_to HOME_URL final end' Entonces, en mi controlador de inicio de sesión, después de la autenticación del usuario, compruebe si hay algo almacenado en la sesión [: original_target] y, si es así, vaya a eso. – Benjin

Cuestiones relacionadas