Как сохранить файл cookie в Play Framework?

Я хочу сохранить токен аутентификации с Play Framework, который переживет текущий сеанс, возможно, на несколько дней или даже недель, чтобы пользователям не приходилось каждый раз входить в систему.

Каков рекомендуемый способ сделать это?


person sanity    schedule 16.02.2011    source источник
comment
Пожалуйста, проверьте ответ, чтобы закрыть этот вопрос. Это поможет и другим. Спасибо :)   -  person Cyril N.    schedule 09.05.2011


Ответы (4)


arrow_upward
20
arrow_downward

Объект ответа имеет метод setCookie, который делает именно то, что вы хотите.

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

Помните, что данные, хранящиеся в файле cookie, не зашифрованы, поэтому, если вы хотите их зашифровать, используйте метод Crypto.sign. Который подписывает ваш код с помощью секретного ключа play framework.

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

person Codemwnci    schedule 16.02.2011
comment
Как бы вы сохранили файл cookie, если хотите, чтобы он был доступен для всех ваших поддоменов? Я пытаюсь это сделать, но файл cookie не создается: response.setCookie(webLoggedIn, true, mydomain.org, , 2592000, false, false); - person HelpMeStackOverflowMyOnlyHope; 26.04.2016

arrow_upward
7
arrow_downward

Я бы также посоветовал вам взглянуть на безопасный модуль, представленный в 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();
}

Паскаль

person mandubian    schedule 16.02.2011


arrow_upward
0
arrow_downward

У объекта ответа есть несколько методов, которые помогут вам. См. javadoc.

person niels    schedule 16.02.2011