2011-06-29 18 views
22

¿Cuál es la mejor práctica para redirigir al usuario, utilizando Devise, de vuelta a la página en la que se encuentra actualmente después de que cierra la sesión?Redirecting Devise After Sign Out

El devise docs decir para anular el siguiente (en el controlador de la aplicación):

def after_sign_out_path_for(resource_or_scope) 
    # logic here 
end 

que es bastante fácil. Sin embargo, Soy la creación de la página anterior para ser una variable de sesión, así:

session[:return_to] = request.fullpath 

El problema es que cuando se cierra la sesión, la sesión se destruye, y el método de arriba se produce después de la sesión se destruye, lo que significa que ya no tienes acceso a él. Estoy pensando en ponerlo en una variable de clase o algo similar, pero quería ver lo que SO pensó.

+0

Quizás intente configurar la ruta return_to en el flash en lugar de la sesión, p. flash [: return_to] –

+0

pensamiento interesante: me encantaría crear una variable de clase, pero no está claro cuál es el orden de ejecución del método, y los documentos no ayudan. – aronchick

Respuesta

33

Si siempre está utilizando la página donde se hizo clic en el enlace de cierre de sesión, podría utilizar el referente en la solicitud.

def after_sign_out_path_for(resource_or_scope) 
    request.referrer 
end 
+0

Interesante, lo había ignorado por completo porque tenía que hacer todo tipo de trabajos en la parte frontal para asegurarme de que no estuvieran en la página de inicio de sesión, ¡pero creo que eso funciona! – aronchick

+0

tiene el mismo problema hoy y esto lo solucionó, gracias! –

+0

Tan genial. Exactamente lo que había estado tratando de hacer durante años. Gracias por una respuesta increíble! –