2014-11-26 2 views
4

У меня есть пользовательская схема, где я хочу обновить некоторую информацию, например.Обновление одного поля в модели mongoose (node.js)

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(); 
}); 

Теперь, когда я пытаюсь сохранить это берет Allready hased пароль и хэш его снова, любая идея, как избежать этого?

ответ

7

Используйте 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); 
}) 
+0

Спасибо, что похоже на решение :) – user1930848

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(); 
}); 
Смежные вопросы