繁体   English   中英

mongodb 更新前的 Hash 密码

[英]Hash password before mongodb update

所以我花了一段时间试图解决这个问题。 基本上我有一个用户配置文件更新页面,当用户输入我想要更新我的 mongo db 的新凭据时。 当我更新它时,一切正常,我的 mongo 服务器得到更新,但是当我登录时,我使用 bcrypt 来匹配散列密码和未散列密码,这就是我的错误,因为更新的密码没有散列。

更新蒙戈:

 const { email, password, password2 } = req.body;
 const _id = ObjectID(req.user);

  User.updateOne(
      { _id },
      { $set: { email: email, password: password } },
      (err) => {
        if (err) {
          throw err;
        } else {
          req.flash('success_msg', 'profile updated');
          res.redirect('profile');
        }
      }
    );

这是我对密码进行哈希处理的尝试。 它在控制台中出现错误(错误:传入的参数必须是 12 个字节的单个字符串或 24 个十六进制字符的字符串)。 我试图通过制作 object id.toString 来解决这个问题,但它仍然给出了一个错误:

  const { email, password, password2 } = req.body;
  const _id = ObjectID(req.user);

    User.updateOne(
      { _id },
      { $set: { email: email, password: password } },
      (err, user) => {
        const updatedPassword = password;
        if (err) {
          throw err;
        } else {
          bcrypt.genSalt(10, (err, salt) => {
            bcrypt.hash(updatedPassword.password, salt, (err, hash) => {
              if (err) {
                throw err;
              }
              updatedPassword.password = hash;
              updatedPassword.save();
            });
          });
        }
        req.flash('success_msg', 'profile updated');
        res.redirect('profile');
      }
    );

如果这很混乱,我很抱歉。 此外,如果您找到解决方案,请解释它,如果您需要更多代码,我会发布它。

您可能会在未显示的中间件中反序列化用户,因此以下行应更改为:

const _id = ObjectID(req.user);

const _id = new ObjectID(req.user._id);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM