【问题标题】:NodeJS Updating User Bcrypt - Password doesn't get hashedNodeJS更新用户Bcrypt - 密码没有被散列
【发布时间】:2016-03-23 10:10:34
【问题描述】:

我正在尝试使用 bcrypt-nodejs 模块为具有哈希密码的 Node.JS 应用程序上的用户配置文件设置更新功能。它在登录时工作,但是当我更新配置文件时,它会使用纯文本更新用户对象(即:我输入“文本”作为密码,数据库显示“文本”)。我想在配置文件更新时对密码进行哈希处理。我将如何解决这个问题?

下面是我的控制器代码:

exports.editUser = function(req, res) {
 // user edit form set to findonendupdate
 User.findByIdAndUpdate({ _id: req.params.user_id, randString: req.body.randString }, req.body, function(err, user) { 

   if (err) 
    res.send(err); 
   res.json({ data: user }); 
 });
};

作为参考,这是适用于新用户注册的用户模型代码:

 passport.use('local', new LocalStrategy(
  function(username, password, callback) {
   User.findOne({ username: username } , function (err, user) {
     if (err) { return callback(err); }

     // No user found with that username
     if (!user) { return callback(null, false); }

     // Make sure the password is correct
     user.verifyPassword(password, function(err, isMatch) {
       if (err) { return callback(err); }

     // Password did not match
       if (!isMatch) { return callback(null, false); }

     // Success
       return callback(null, user);
     });
  });
 }
));

【问题讨论】:

    标签: node.js passport.js updates bcrypt passport-local


    【解决方案1】:
    User.findByIdAndUpdate({...}, req.body, function(err,...
    

    您在此处收到req.body 中的密码并告诉它直接更新它(纯文本)。

    你需要散列然后更新

    // retrieve the password field
    var password = req.body.password
    
    // update it with hash
    bcrypt.hash(password, (hash) => {
      req.body.password = hash
    
      // then update
      User.findByIdAndUpdate({...}, req.body, function(err,... // then update
    });     
    

    【讨论】:

      【解决方案2】:

      我刚刚通过在更新密码之前将纯文本密码转换为哈希密码来解决。

      req.body.password = await bcrypt.hash(req.body.password, 8);
      
      await Admin.findOneAndUpdate({ _id: req.body._id }, req.body, { new: true }, (err, doc) => {
                          if (!err) { 
                              req.flash('success', 'Admin Updated successfully!');
                              res.status(201).render('admin-views/admin/edit_admin', { success_message: req.flash('success'), admin: doc });
                          }
                          else {
                              res.render("admin-views/admin/edit_admin", {
                                  admin: req.body
                              })
                          }
                      })
      

      希望此代码有效!

      【讨论】:

        猜你喜欢
        • 2014-12-10
        • 1970-01-01
        • 1970-01-01
        • 2017-06-26
        • 2021-06-04
        • 2019-07-17
        • 2021-02-27
        • 2013-04-24
        • 1970-01-01
        相关资源
        最近更新 更多