假设我有一个带字段的用户域类
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 Events
我想到了以下几点:
def beforeInsert = { doHash(); }
def beforeUpdate = { doHash(); }
void doHash()
{
if(this.password.size() != 32)
{
this.password = this.password.encodeAsHash(); // I wrote a codec for this
}
}
现在,在创建新用户时,这很好。但是,如果我创建了一个用户,给他们一个密码,然后保存它们,然后更改密码并重新保存这些方法中的任何一个都不会被调用,而普通的测试密码也会被存储。