Mongoose bcrypt 设置密码并异步保存
Mongoose bcrypt set password and saving asynchronously
我有一个猫鼬模式:
UserSchema.methods.setPassword = function (password) {
bcrypt.hash(password, saltRounds).then(function (hash) {
this.hash = hash;
});
};
下面是我创建用户对象的方式:
router.post('/signup', function(req, res, next){
var user = new User();
user.username = req.body.user.username;
user.email = req.body.user.email;
user.setPassword(req.body.user.password);
user.save().then(function(){
return res.json({user: user.toAuthJSON()});
}).catch(next);
});
但是,它保存了没有散列密码的用户。我猜这是因为 bcrypt.hash 回调在调用 user.save 之前没有 运行。我怎样才能最好地解决这个问题?
bcrypt 文档上说不要使用 bcrypt.hashSync,这里合适吗?
UserSchema.methods.setPassword = function (password) {
return new Promise((resolve, reject) => {
bcrypt.hash(password, saltRounds, (error, hash) => {
if (error) {
reject(error);
} else {
this.password = hash;
resolve(true);
}
})
})
}
然后调用
await user.setPassword(req.body.user.password);
或者捕获错误,idk
我有一个猫鼬模式:
UserSchema.methods.setPassword = function (password) {
bcrypt.hash(password, saltRounds).then(function (hash) {
this.hash = hash;
});
};
下面是我创建用户对象的方式:
router.post('/signup', function(req, res, next){
var user = new User();
user.username = req.body.user.username;
user.email = req.body.user.email;
user.setPassword(req.body.user.password);
user.save().then(function(){
return res.json({user: user.toAuthJSON()});
}).catch(next);
});
但是,它保存了没有散列密码的用户。我猜这是因为 bcrypt.hash 回调在调用 user.save 之前没有 运行。我怎样才能最好地解决这个问题?
bcrypt 文档上说不要使用 bcrypt.hashSync,这里合适吗?
UserSchema.methods.setPassword = function (password) {
return new Promise((resolve, reject) => {
bcrypt.hash(password, saltRounds, (error, hash) => {
if (error) {
reject(error);
} else {
this.password = hash;
resolve(true);
}
})
})
}
然后调用
await user.setPassword(req.body.user.password);
或者捕获错误,idk