我正在研究允许用户更新其密码的功能。但是,由于某些原因,哈希密码未更新到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
我不知道为什么新密码未保存到数据库中。
非常感谢您的帮助。
答案 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));
})
})