2011-02-16 15 views
16

Quiero almacenar un token de autenticación con Play Framework que sobreviva a la sesión actual, tal vez por días o incluso semanas, para que los usuarios no tengan que iniciar sesión cada vez.¿Cómo almaceno una cookie en Play Framework?

¿Cuál es la forma recomendada de hacerlo?

+1

Por favor, marca una respuesta para cerrar esa pregunta. Ayudará a otros también. Gracias :) –

Respuesta

20

El objeto respuesta tiene un setCookie método, que hace exactamente lo que quiere

response.setCookie("playlonglivecookie", yourData, "14d"); 

Recuerde que los datos almacenados en la cookie no están cifrados, por lo tanto, si desea encriptarlos, utilice el método Crypto.sign. Que firma tu código usando la clave secreta de Play Framework.

http://www.playframework.org/documentation/api/1.1.1/play/mvc/Http.Response.html#setCookie(java.lang.String,%20java.lang.String)

+0

¿Cómo almacenarías una cookie si quieres compartirla en todos tus subdominios? Estoy intentando hacer esto, pero no está produciendo una cookie: response.setCookie ("webLoggedIn", "true", "mydomain.org", "", 2592000, falso, falso); – HelpMeStackOverflowMyOnlyHope

0

El objeto de respuesta tiene algunos métodos para ayudarlo. Ver javadoc.

7

También le aconsejo que eche un vistazo al módulo de seguridad proporcionado en play-1.x/modules/secure y el archivo Secure.java ... proporciona una casilla de verificación "recordarme" en el formulario de inicio de sesión que te permite mantenerte conectado para la eternidad.

y el código de esta función (en especial la response.setCookie al final):

public static void authenticate(@Required String username, String password, boolean remember) throws Throwable { 
    // Check tokens 
    Boolean allowed = false; 
    try { 
     // This is the deprecated method name 
     allowed = (Boolean)Security.invoke("authentify", username, password); 
    } catch (UnsupportedOperationException e) { 
     // This is the official method name 
     allowed = (Boolean)Security.invoke("authenticate", username, password); 
    } 
    if(validation.hasErrors() || !allowed) { 
     flash.keep("url"); 
     flash.error("secure.error"); 
     params.flash(); 
     login(); 
    } 
    // Mark user as connected 
    session.put("username", username); 
    // Remember if needed 
    if(remember) { 
     response.setCookie("rememberme", Crypto.sign(username) + "-" + username, "30d"); 
    } 
    // Redirect to the original URL (or /) 
    redirectToOriginalURL(); 
} 

Pascal

1

Con el juego> 2,5 setCookie está en desuso.

puede utilizar en su lugar:

Http.Response.setCookie(Http.Cookie cookie) 

se puede crear una nueva cookie con el constructor:

Http.Cookie.builder("name", "value").withMaxAge(15).build(); 

15 días es la fecha de caducidad

Referencia: https://www.playframework.com/documentation/2.5.x/api/java/play/mvc/Http.Response.html#setCookie-play.mvc.Http.Cookie-

Ejemplo: https://github.com/playframework/playframework/blob/master/framework/src/play/src/test/java/play/mvc/CookieBuilderTest.java