我有一个用户架构,我想更新一些信息,比如这个。
User.findOne({_id: idd}, function(err, usr){
usr.info = "some new info";
usr.save(function(err) {
});
});
但该模型在保存时有一个钩子来散列密码
UserSchema.pre('save', function(next) {
if (this.password && this.password.length > 6) {
this.salt = new Buffer(crypto.randomBytes(16).toString('base64'), 'base64');
this.password = this.hashPassword(this.password);
}
next();
});
现在,当我尝试保存时,需要使用已经全部用过的密码并再次哈希,任何想法如何避免这种情况?
答案 0 :(得分:15)
使用Model.Update并将创建新密码移至独立功能。
var salt = new Buffer(crypto.randomBytes(16).toString('base64'), 'base64');;
var newPassword = this.hashPassword("someNew password");
User.update({_id: idd}, {
info: "some new info",
password: newPassword
}, function(err, affected, resp) {
console.log(resp);
})
答案 1 :(得分:3)
您是否尝试使用isModified
?
UserSchema.pre('save', function(next) {
if (this.password && this.password.length > 6 && MYMODEL.isModified('password')) {
this.salt = new Buffer(crypto.randomBytes(16).toString('base64'), 'base64');
this.password = this.hashPassword(this.password);
}
next();
});