2012-04-18 13 views
6

¡Con Play! framework 2.0, utilizando Security Trait:En juego! 2.0 con rasgo de seguridad ¿Cómo puedo redireccionar a la URL original después de iniciar sesión?

Si dejo que los usuarios naveguen a varias partes del sitio no autenticadas, pero en ciertas acciones que necesitan autenticarse, ¿cómo puedo redirigirlas a su url original antes de la autenticación y no la misma URL para ¿todas?

Es un requisito similar a esta pregunta para Play! 1.x Playframework's Secure module is not redirecting to the original url after login.

Sin embargo, el parámetro de flash para la url original no está disponible en 2.0 por lo que puedo ver.

Básicamente el cambio Busco sería en el manipulador autenticar método

def authenticate = Action { implicit request => 
    loginForm.bindFromRequest.fold(
     formWithErrors => BadRequest(html.login(formWithErrors)), 
     user => Redirect(routes.Application.index).withSession(Security.username -> user._1) 
    ) 
    } 

Cuando algún tipo de redirección (originalRequestUrl) sería práctico.

¿Alguna idea para una solución limpia?

Respuesta

11

Usted puede utilizar el encabezado Referer, o explícitamente llevar a la url retorno en su acción autenticar:

El uso de la cabecera Referer

def authenticate = Action { implicit request => 
    loginForm.bindFromRequest.fold(
    errors => BadRequest(html.login(errors)), 
    user => { 
     val returnUrl = request.headers.get(REFERER).getOrElse(routes.Application.index.url) 
     Redirect(returnUrl).withSession(Security.username -> user._1) 
    } 
} 

Llevar explícitamente la url de retorno

def authenticate(returnUrl: String) = Action { implicit request => 
    loginForm.bindFromRequest.fold(
    errors => BadRequest(html.login(errors, returnUrl)), 
    user => Redirect(returnUrl).withSession(Security.username -> user._1) 
) 
} 

Al usar el encabezado HTTP Referer, se hasta que tenga que manejar el caso donde el navegador no llena este encabezado, y al llevar explícitamente la URL de retorno como un parámetro de su acción authenticate puede tener más repetitivo en el manejo de su código con autenticación ...

Cuestiones relacionadas