0

フィールドusernameとを持つユーザー ドメイン クラスがあるとしますpassword。簡単にするために、パスワードを SHA-512 ハッシュとして保存したいとします。また、ハッシュする前にパスワードを検証したいだけでなく、保存する前にパスワードを透過的にハッシュしたいと考えています。ドメインオブジェクトでこれを行う方法はありますか?

static constraints = 
{
    username(blank: false, unique: true);
    password(minSize: 10);
}

言う代わりに:

def user = new User(username: "joe", password: createHash("joepass"));

ハッシュを検証できない場所

def user = new User(username: "joe", password: "joepass");
if(user.validate())
{
    user.save(); // Would then turn password into a hash on save
}
else
{
    // Handle validation errors
}

GORM イベントに続いて、次のことを思いつきました。

def beforeInsert = { doHash(); }
def beforeUpdate = { doHash(); }
void doHash()
{
    if(this.password.size() != 32)
    {
        this.password = this.password.encodeAsHash(); // I wrote a codec for this
    }
}

これで、新しいユーザーを作成するときに問題なく動作します。ただし、ユーザーを作成し、パスワードを指定して保存し、パスワードを変更して再保存すると、これらのメソッドはどちらも呼び出されず、プレーンなテスト パスワードが保存されます。

4

1 に答える 1

1

GORM イベントを使用する

保存または更新イベントで、ハッシュの作成を実行できます

   def beforeInsert = {
       // do hash magic
   }
   def beforeUpdate = {
        // do hash magic
   }
于 2010-11-14T00:15:18.410 に答える