windows上用bcrypt-nodejs 替代 bcrypt
相对应的代码为
var bcrypt = require('bcrypt-nodejs') ... bcrypt.hash(user.password, null, null, function (err, hash){ if (err) { return next(err) } user.password = hash next() })
相对应的代码为
var bcrypt = require('bcrypt-nodejs') ... bcrypt.hash(user.password, null, null, function (err, hash){ if (err) { return next(err) } user.password = hash next() })
2015-02-01
user.password = hash; 这一步是异步执行的,还没赋值成功,明文密码已经保存到数据库了。
参考以下同步写法:
UserSchema.pre('save', function (next) { var user = this; if (this.isNew) { this.meta.createAt = this.meta.updateAt = Date.now(); } else { this.meta.updateAt = Date.now(); } var hash = bcrypt.hashSync(this.password); this.password = hash; next(); }); UserSchema.methods = { comparePassword: function (_password, cb) { var hash = this.password; var isMatch = bcrypt.compareSync(_password, hash); cb(null, isMatch); } };
var bcrypt = require('bcrypt-nodejs');
……
UserSchema.pre('save', function(next){
if(this.isNew){
this.meta.createAt = this.meta.updateAt = Date.now();
} else {
this.meta.updateAt = Date.now();
}
bcrypt.genSalt(SALT_WORK_FACTOR, function(err, salt){
if(err) return next(err);
bcrypt.hash(user.password, null,null, function(err, hash){
if(err) return next(err);
user.password = hash;
next();
});
});
next();
})
还不行
举报