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();
})
还不行
举报