Я хочу сохранить токен аутентификации с Play Framework, который переживет текущий сеанс, возможно, на несколько дней или даже недель, чтобы пользователям не приходилось каждый раз входить в систему.
Каков рекомендуемый способ сделать это?
Я хочу сохранить токен аутентификации с Play Framework, который переживет текущий сеанс, возможно, на несколько дней или даже недель, чтобы пользователям не приходилось каждый раз входить в систему.
Каков рекомендуемый способ сделать это?
Объект ответа имеет метод setCookie, который делает именно то, что вы хотите.
response.setCookie("playlonglivecookie", yourData, "14d");
Помните, что данные, хранящиеся в файле cookie, не зашифрованы, поэтому, если вы хотите их зашифровать, используйте метод Crypto.sign
. Который подписывает ваш код с помощью секретного ключа play framework.
Я бы также посоветовал вам взглянуть на безопасный модуль, представленный в play-1.x/modules/secure, и файл Secure.java... он содержит флажок «запомнить меня» в форме входа, который позволяет вам оставаться в системе. навечно.
и код этой функции (особенно response.setCookie в конце):
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();
}
Паскаль
С play > 2.5 setCookie устарел.
вместо этого вы можете использовать:
Http.Response.setCookie(Http.Cookie cookie)
Вы можете создать новый файл cookie с помощью конструктора:
Http.Cookie.builder("name", "value").withMaxAge(15).build();
15 дней - это срок годности
У объекта ответа есть несколько методов, которые помогут вам. См. javadoc.