mongoose和bcrypt-nodejs不散列和保存密码

我正在使用bcrypt-node和mongoose来散列用户密码,并将该用户保存到mongo数据库中。 当我debugging下面的代码时,它似乎工作正常,当你在代码中显示密码时logging密码,但是当你检查数据库时,它仍然是纯文本。 我对node和mongoose / mongodb比较陌生,所以我不确定如何排除故障。 我试着改变调用next(); return next(user); 正如在另一篇文章中所build议的,但这并没有帮助。 任何帮助将不胜感激。

我正在使用节点版本6.9.5,mongoose4.7.0,bcrypt-nodejs 0.0.3和mongo 3.2.10

  UserSchema.pre('save', function (next) { var user = this; if (user.password != "") { if (this.isModified('password') || this.isNew) { bcrypt.genSalt(10, function (err, salt) { if (err) { return next(err); } bcrypt.hash(user.password, salt, null, function(err, hash) { if (err) { return next(err); } console.log(hash); user.password = hash; console.log(user.password); next(); }); }); } else { return next(); } } return next(); }); 

您将散列函数放在genSalt()函数之外。 此外,你使用了一些嵌套和条件,使得难以遵循。 尝试以下,看看它是如何工作的。

 UserSchema.pre('save', function(next) { const user = this; if (!user.isModified('password')) { return next(); } bcrypt.genSalt(10, (err, salt) => { if (err) { return next(err); } bcrypt.hash(user.password, salt, null, (error, hash) => { if (error) { return next(error); } console.log('HASH: ', hash); user.password = hash; console.log('USER.PASSWORD: ', user.password); next(); }); }); }); 

更多的可读性,对吗?