0

我查看了“zentasks”示例代码来学习一些基本的用户登录和安全知识。Appication 控制器有一个authenticate 方法,在该方法期间调用User.authenticate 方法。以下是这些链接中的几个代码片段:

public static Result authenticate() {
    Form<Login> loginForm = form(Login.class).bindFromRequest();
    if(loginForm.hasErrors()) {
        return badRequest(login.render(loginForm));
    } else {
        session("email", loginForm.get().email);
        return redirect(
            routes.Projects.index()
        );
    }
}
...
public static class Login {

    public String email;
    public String password;

    public String validate() {
        if(User.authenticate(email, password) == null) {
            return "Invalid user or password";
        }
        return null;
    }

}

如您所见,如果它进行了身份验证(即找到了一个用户对象),该authenticate方法会将“电子邮件”添加到会话中。我想添加完整的用户对象,但是在我有会话的控制器操作中,我没有User对象。我不想重新查询数据库,我想使用User刚刚在Login.validate. 这样做的好方法是什么?

4

1 回答 1

3

您是否有理由不能简单地将字段添加到您的登录类?

public static class Login {

    public String email;
    public String password;
    public User user;

    public String validate() {
        user = User.authenticate(email, password);
        if(user == null) {
            return "Invalid user or password";
        }
        return null;
    }
}

并不是说这一定会对您有所帮助,查看 API 似乎您无法将对象添加到会话中,只能添加字符串。

http://www.playframework.org/documentation/api/2.0.4/java/play/mvc/Http.Session.html

于 2012-11-15T19:28:37.077 回答