2012-02-28 28 views
8

En un sitio de carriles 2.3.8 tengo enlaces de inicio de sesión en cada página (que lleva a un usuario a una página de inicio de sesión diferente). Después de un inicio de sesión exitoso, el usuario se redirige a la raíz. En cambio, me gustaría redireccionar a la página que estaban viendo anteriormente.Devolver usuario a la página anterior después de iniciar sesión (Rails)

He intentado usar request.referer:

redirect_back_or_default(request.referer) 

Dónde redirect_back_or_default:

def redirect_back_or_default(default) 
    redirect_to(session[:return_to] || default) 
    session[:return_to] = nil 
end 

Pero eso genera un "acceso denegado" error, a pesar de que el inicio de sesión se realiza correctamente.

+0

Esto parece correcto, ¿está seguro de que en realidad están iniciando sesión? – Chap

+0

Sí, definitivamente están iniciando sesión (pueden ver páginas inaccesibles anteriormente, cambios de enlace de inicio de sesión en el enlace de la página del usuario, cambios en el enlace de inicio de sesión, etc.). El error ocurre incluso cuando el usuario inicia sesión desde la raíz. – Exupery

+0

¿Podría publicar su código de controlador de sesión? – PhillipKregg

Respuesta

13

lugar de tratar de redirigir a la de referencia, me gustaría establecer la sesión [: return_to]

Usted necesitará un filtro antes de que se ejecuta antes de que su autenticación en todas sus acciones:

def store_return_to 
    session[:return_to] = request.url 
end 

Luego cambie su redireccionamiento para que solo sea

redirect_back_or_default() 
+0

Exactamente lo que estaba buscando, ¡esto funciona de maravilla, gracias! – Exupery

+0

Gracias por esto, me llevó horas encontrarlo y otras respuestas en StackOverflow no funcionaron. – kakubei

+0

Sí. Esta es una buena solución que no es Idear. Eso es lo que estaba teniendo dificultades para encontrar, así que pensé que escribiría "no usar Devise" aquí en los comentarios, ¡así que es más fácil de encontrar! –

Cuestiones relacionadas