猫鼬密码被哈希两次

时间:2017-09-07 15:05:43

标签: node.js mongodb mongoose

我是Mongoose和Node JS的新手,在用户更新后再次对密码进行哈希处理会出现此问题。

以下是散列的代码:

UserSchema.pre('save', function (next) {
    var user = this;
    bcrypt.hash(user.password, 10, function (err, hash) {
        if (err) {
            return next(err);
        }
        user.password = hash;
        next();
    })
});

这是为了更新用户

router.post('/insert', function (req, res) {
    User.findById(req.session.userId, function (err, user) {

        if (err) { throw err; }
        if (user) {
            user.patients = req.body.patients
            user.diagnosis_list = req.body.diagnosis_list
            user.medicine_dose_list = req.body.medicine_dose_list
            user.medicine_list = req.body.medicine_list

            user.save(function (err) {
                if (err) throw err;
                res.send(user.toJSON());
            })
        }
    })
})

据我所知,必须防止在更新用户时调用presave,我不知道如何做到这一点。有没有其他方法可以更新用户而无需预先调用可能?

1 个答案:

答案 0 :(得分:0)

if (!user.isModified('password')) {
    return next();
}
bcrypt.hash(user.password, 10, function (err, hash) {
    if (err) {
        return next(err);
    }
    user.password = hash;
    next();
})

http://mongoosejs.com/docs/api.html#document_Document-isModified