我已经搜索了这个问题,发现的所有解决方案实际上都无效。我目前正在使用此函数对密码进行加密,然后再将其存储在数据库中,但是即使在登录this
时更改了值,也不会像在函数中更改密码那样存储密码。
UserSchema.pre('findOneAndUpdate', function(next) {
const update = this.getUpdate();
if (!_.isEmpty(update.password)) {
bcrypt.genSalt(10, (err, salt) => {
bcrypt.hash(update.password, salt, (err, hash) => {
this.getUpdate().password = hash;
next();
})
})
}
next();
});
我也尝试过更改this._update.password
的值,但是它也不起作用。我也尝试过使用$set
甚至使用post
钩子,但是它们都没有帮助。我在做什么错了?
答案 0 :(得分:2)
我刚刚在本地进行了测试:
pre
和这个AuthorSchema.pre('findOneAndUpdate', function(next) {
this._update.password = 'BBB'
next();
});
钩子:
BBB
密码已另存为type: String
作者模式的密码字段为next()
我正在 3.6.5
在您的bcrypt情况下,您还有一个额外的else
而没有UserSchema.pre('findOneAndUpdate', function(next) {
const update = this.getUpdate();
if (!_.isEmpty(update.password)) {
bcrypt.genSalt(10, (err, salt) => {
bcrypt.hash(update.password, salt, (err, hash) => {
this.getUpdate().password = hash;
next();
})
})
} else {
next();
}
});
,这使您感到困惑……应该是:
#!/bin/bash
DATE=`date +%Y%m%d`
LOGPATH="/var/log/kbci-ocr"
LOGDIR="${LOGPATH}/LOG-${DATE}"
LOGERR="${LOGDIR}/err.log"
docker ps --format {{.ID}},{{.Image}} > docker_running.txt
file=docker_running.txt
for i in `cat $file`
do
echo "Checking log dir presence"
if [ ! -d $LOGDIR ]; then
mkdir -p $LOGDIR;
echo "Log dir created"
else
echo "Log dir exist"
fi
echo "Creating log dir for the current log saving iteration"
container=$(echo $i | cut -d"," -f1)
TARGETDIR="${LOGDIR}/${container}+$(date +%Y%m%d_%H%M%S)"
mkdir -p $TARGETDIR
echo "Copying log files from container ${container}"
imagename=$(echo $i | cut -d"," -f2 | cut -d"/" -f4 | cut -d":" -f1)
docker cp ${container}:/app/'\${imagename}_app.json' ${TARGETDIR}
docker cp ${container}:/app/'\${imagename}_errors.json' ${TARGETDIR}
docker cp ${container}:/app/'\${imagename}_sql.json' ${TARGETDIR}
docker cp ${container}:/app/'\${imagename}_webHost.json' ${TARGETDIR}
done
rm -rf docker_running.txt
答案 1 :(得分:0)
user.pre('findOneAndUpdate', function(next){
const user=this.getUpdate().$set;
if(!user.password){
next();
}
else{
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);
}
user.password = hash;
next();
});
});
}
})