0

「zentasks」サンプルコードを見て、基本的なユーザーログインとセキュリティに関することを学びました。Appicationコントローラーには認証メソッドがあり、そのメソッドの間に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;
    }

}

ご覧のとおり、認証する(つまり、Userオブジェクトを見つける)と、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 に答える