我正在使用play框架中的“Secure”模块,它的工作效果非常好。我可以通过在我的应用程序中的/ login路由发布一个来登录用户。
但是,当我“创建/注册”新用户时,我希望该用户在用户创建后自动登录。这个,我似乎无法以编程方式工作,即不必发布表格登录。
我的用户创建操作的当前代码如下:
public static void create(@Required @Email String email, @Required String password, @Required @Equals("password") String passwordConfirmation) {
User user = new User(email);
user.password = new Crypto().encryptAES(password);
user.save();
try {
Secure.authenticate(email, password, false); // <== this is the action in secure module mapped to /login
} catch(Throwable t) {
t.printStackTrace();
}
}
所以我手动调用Secure.authentication(username, password, remember)
方法,但这只是将我重定向到登录页面而不是我的目标页面。
我感觉cookie或其他东西没有被设置,因为我直接调用Secure.authenticate而不是通过请求/响应,但我只是不确定。
有什么想法吗?
答案 0 :(得分:9)
一个想法可能是在会话中设置用户名(用户成功注册后)
session.put("username", username);
这将确保Secure.connected()按预期返回。
如果你需要'记住我',
if(remember){
response.setCookie("rememberme", Crypto.sign(username) + "-" + username, "30d");
}
实际上,这是Secure模块在成功验证后所执行的操作。 查看Secure module