问题描述
我正在尝试创建一个功能,用户可以在其中更改其详细信息。除了当我尝试允许用户更改他们的密码时,其他项目都有效。
编辑:如果我也更改密码,代码就可以工作,否则会使服务器崩溃并给出 bcrypt 错误。如果我不想更改密码,有什么办法吗?还是我必须把它们分开?
这是我得到的错误:
Error: data and salt arguments required
路线
router.put('/:user_id/edit',validatetoken,async (req,res) => {
const userId = req.params.user_id;
const { email,password,first_name,last_name,role_id } = req.body;
await bcrypt.hash(password,10).then((hash) => {
Users.update({
email: email,password: hash,first_name: first_name,last_name: last_name,role_id: role_id
},{ where: {user_id: userId} });
res.json('User updated successfully');
})
})
解决方法
我只是为它做了一个 if 语句,哈哈。对不起各位。
router.put('/:user_id/edit',validateToken,(req,res) => {
const userId = req.params.user_id;
const { email,password,first_name,last_name,role_id } = req.body;
if (password != undefined) {
bcrypt.hash(password,10).then((hash) => {
Users.update({
email: email,password: hash,first_name: first_name,last_name: last_name,role_id: role_id
},{ where: {user_id: userId} });
res.json('User updated successfully');
})
} else {
Users.update({
email: email,role_id: role_id
},{ where: {user_id: userId} });
res.json('User updated successfully');
}
});
,
因此,据我所知,您想要创建编辑配置文件功能,但问题是当您不更改密码时它也会崩溃。解决办法很简单。
解决方案
您可以通过验证输入来解决这个问题,这是您需要小心的。最简单的方法是使用 if 语句,如下所示:if (email == '' || password == '' || ... || role_id == '') { // Check if all the parameters are given
return false; // Will terminate the callback function
}
虽然这可能有点矫枉过正,您希望以更好的方式处理它,例如忽略更改密码 os ots 为空的部分,如下所示:
if (password != '') {
// Change the password here
}
另一种解决方案是将密码更改功能移动到另一个端点(或修改端点,以便在满足条件时更改密码)并分别处理密码和一般配置文件信息,这感觉是一种更好的方法,但我不确定。