在猫鼬中更新用户之前先哈希密码

时间:2019-01-04 13:25:42

标签: node.js mongodb mongoose passport.js

我创建用户,对他的密码进行哈希处理并保存在mongo上。当我尝试更新该用户时,我的问题开始了。现在,当我更新哈希表时没有生成,因为我真的不知道该怎么做。

吸引我正在谈论的用户的中间件:

exports.userByID = function(req, res, next, id) {
  User.findOne(
    {
      _id: id
    },
    function(err, user) {
      if (err) {
        return next(err);
      } else {
        req.user = user;
        next();
      }
    }
  );
};

用户控制器,用于更新用户:

exports.update = async function(req, res, next) {

  User.findByIdAndUpdate(req.user.id, req.body, function(err, user) {
    if (err) {
      return next(err);
    } else {
      res.json(user);
    }
  });
};

用户模型上的预“保存”:

UserSchema.pre("save", function(next) {

  var user = this;

  if (user.password) {

    var md5 = crypto.createHash("md5");
    user.password = md5.update(user.password).digest("hex");
    console.log("Password após o save (hasheando):" + user.password);
  }

  next();
});

我正在使用护照认证(“本地”)。已经在控制器更新上尝试过user.save()

user.save();
res.json(user);

但是,没有成功。

2 个答案:

答案 0 :(得分:1)

这可能是因为您没有将SELECT c.display AS time, COUNT(*) AS ticks FROM calendar c LEFT JOIN sensorticks s ON c.ts = date_trunc('hour', s.time + interval '45 minutes') WHERE s.time BETWEEN (TIMESTAMP'2019-01-04 00:15:00') AND (TIMESTAMP'2019-01-04 14:15:00') GROUP BY c.display ORDER BY c.display DESC; 存储在mongo中。

new_password中,您必须这样做:

update controller

答案 1 :(得分:0)

在保存密码之前,只需将其散列并在数据库中更新即可。它将类似于下面的内容。

 exports.update = async function(req, res, next) {
  let { body} = req;
  if(body['password']){
    var md5 = crypto.createHash("md5");
    body['password']= md5.update(body['password']).digest("hex");
  }
  let updateUser = await User.findByIdAndUpdate(req.user.id, body)
};