Mongodb更新的密码未保存到数据库中

时间:2019-12-05 20:03:03

标签: reactjs mongodb

我正在研究允许用户更新其密码的功能。但是,由于某些原因,哈希密码未更新到mongodb数据库中。

这是我的updateProfile的前端代码:

    updateProfile() {
        const modified_auth={
            name: this.state.name,
            email: this.state.email,
            nid: this.state.nid,
            password: this.state.password,
        }

        axios.post('http://localhost:4000/userprofile/update', modified_auth)
            .then(res =>{
                console.log(res.data);
            })
            .catch(err => {console.log('Err' + err);});
    }

这是我更新用户个人资料的后端途径:

router.route('/update').post((req,res) => {
    console.log(req.body);
    Auth.findOne({
        $or: [
            { email: req.body.email },
            { nid: req.body.nid }
        ]
    })
    .then(auth => {
        auth.name = req.body.name;
        auth.nid = req.body.nid
        auth.email = req.body.email;
        console.log(auth.password);
        bcrypt.genSalt(10, (err, salt) => {
            bcrypt.hash(req.body.password, salt, (err, hash) => {
                if (err) throw err;
                auth.password = hash;
                console.log(auth.password);
            });
        });
        console.log(auth.password);
        auth.save()
            .then(() => res.json('Auth updated!'))
            .catch(err => res.status(400).json('Error: ' + err));
    console.log(auth.password);
    })
    .catch(err => res.status(400).json('Error: ' + err));
});

我输入了一些打印语句。这些就是我回来的东西:

$2a$10$uKeVPatEK3QqpvtdjvQYaeELnrAfuOlOhbG/4lJBV8brqLzcU5enW
$2a$10$uKeVPatEK3QqpvtdjvQYaeELnrAfuOlOhbG/4lJBV8brqLzcU5enW
$2a$10$uKeVPatEK3QqpvtdjvQYaeELnrAfuOlOhbG/4lJBV8brqLzcU5enW
$2a$10$K8eKneNAxYC2Xrym3eSXM.xas0ZrmIDVUe8WnmmghgvmzT.uw5l/e

我不知道为什么新密码未保存到数据库中。

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

请注意,密码生成是与文档save()调用同时异步发生的。由于预期的行为是在文档更新中包括新密码,因此可以将save()调用放置在回调中以生成密码,以确保新文档具有更新的密码:

        bcrypt.genSalt(10, (err, salt) => {
            bcrypt.hash(req.body.password, salt, (err, hash) => {
                if (err) throw err;
                auth.password = hash;
                console.log(auth.password);
                auth.save()
                    .then(() => res.json('Auth updated!'))
                    .catch(err => res.status(400).json('Error: ' + err));
            })
        })