【问题标题】:Update Password Encrypted by bcrypt MERN更新由 bcrypt MERN 加密的密码
【发布时间】:2023-01-20 21:13:52
【问题描述】:

我正在创建一个管理面板,用户可以在其中注册、登录和更新他的信息。在注册用户信息时,我使用bcrypt库将密码加密存储在MongoDb中。但是,当我获取用户信息以将其置于更新形式时,它会给我一个长加密密码。

我想显示原始密码,以便用户可以查看和更新​​密码:

添加用户功能:

// Add USER 
export const addUser = async (req, res) => {
  try {
    const {
      name,
      email,
      password,
      picturePath,
      country,
      role,
    } = req.body;

    const salt = await bcrypt.genSalt();
    const passwordHash = await bcrypt.hash(password, salt);

    const newUser = new User({
      name,
      email,
      password: passwordHash,
      picturePath,
      country,
      role
    });
    
    const savedUser = await newUser.save();
    res.status(201).json(savedUser);
  } catch (err) {
    res.status(500).json({ error: err.message });
  }
}

更新用户:

// UPDATE USER 
export const updateUser = async (req, res) => {
  try {
      const { id, name, email, password, country, picturePath, role } = req.body;

      const Updateuser = await User.updateOne({"_id": id}, {$set: {
        name: name,
        email: email,
        country: country,
        password: password,
        picturePath: picturePath,
        role: role
      }});
      
      const user = await User.findById(id);
      
      const token = jwt.sign({ id: id }, process.env.JWT_SECRET);

      res.status(200).json({token, user});

  } catch (error) {
      res.status(400).json({message: error.message});
  }
}

【问题讨论】:

  • 您无法获得原始密码,这就是使用 bcrypt 对其进行散列(而不是加密)的全部意义所在。存储密码是一个严重的安全风险。
  • 您不能也不应该向用户显示他以前的密码。

标签: node.js reactjs mongodb bcrypt


【解决方案1】:

散列是一种方法。您不能将散列反转为原始字符串(您也不应该这样做,这会破坏散列的全部意义)。 要更新用户密码,您只需要用户 ID 和新密码。可以这样写:

const { id, password } = req.body;
// hash the new password just as you did for your addUser function
const passwordHash = await bcrypt.hash(password, salt);
const updatedUser = await User.findByIdAndUpdate(id, { password: passwordHash })

这应该使用新密码正确更新您的用户,而其他字段保持不变。

编辑:通常,作为额外的安全手段,您会在更新到新密码之前再次对用户进行身份验证(要求提供旧密码并进行检查)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-31
    • 2017-01-03
    • 2018-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多