微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 PUT 方法mysql2、sequelize、express更改用户密码bcrypt

如何解决使用 PUT 方法mysql2、sequelize、express更改用户密码bcrypt

我正在尝试创建一个功能用户可以在其中更改其详细信息。除了当我尝试允许用户更改他们的密码时,其他项目都有效。

编辑:如果我也更改密码,代码就可以工作,否则会使服务器崩溃并给出 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
}

另一种解决方案是将密码更改功能移动到另一个端点(或修改端点,以便在满足条件时更改密码)并分别处理密码和一般配置文件信息,这感觉是一种更好的方法,但我不确定。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。