【问题标题】:Problem hashing password with bcrypt on node.js在 node.js 上使用 bcrypt 散列密码问题
【发布时间】:2019-07-20 03:36:14
【问题描述】:

我有下面的代码。我正在尝试在他们注册时对我的管理员密码进行哈希处理。密码最初通过猫鼬模式设置为默认值。以下是我的代码。但它不是散列。

 AdminSchema.pre('save', function(next){
  let admin = this; // bind this

  if(admin.$isDefault('password')) {
        bcrypt.genSalt(12, (err, salt)=> { // generate salt and harsh password
            bcrypt.hash(admin.password, salt, (err, hash)=> {
                admin.password = hash;
                return next();
            });
        });
    }

    if(!admin.isModified('password')) {
        return next();
    }

    bcrypt.genSalt(12, (err, salt)=> { // generate salt and harsh password
        bcrypt.hash(admin.password, salt, (err, hash)=> {
            admin.password = hash;
            next();
        });
    });

});

【问题讨论】:

标签: javascript node.js express jwt bcrypt


【解决方案1】:

因为bcrypt方法是异步执行的,所以第一次总是会执行

if(!admin.isModified('password')) {
  return next();
}

这应该可以工作

AdminSchema.pre('save', function(next) {
  const admin = this // bind this

  if (admin.$isDefault('password') || admin.isModified('password')) {
    bcrypt.genSalt(12, (err, salt) => { // generate salt and harsh password
      if (err) {
        return next(err);
      }
      bcrypt.hash(admin.password, salt, (err, hash) => {
        if (err) {
          return next(err);
        }
        admin.password = hash
        return next()
      })
    }) 
  } else {
    return next();
  }
})

【讨论】:

  • 它可以工作,但是当我更新密码时,它不会散列。这是我一直遇到的问题。我使用 bcryptjs。
  • 你确定这个 'admin.isModified('password')' 在修改密码时返回 true 吗?
  • 如何更新密码?以及如何在请求结束时保存模型
  • 这是我的更新代码: Admin.findByIdAndUpdate(id, {$set:body}, {new: true}).then((doc)=>{ // 检查 doc 是否找到并且更新 if(!doc){ res.status(404).send(); } res.send(doc); // Admin.findById(id).then(doc=>{ // res.send(doc); // }) }).catch((e)=>{ res.status(400).send(); }); // 返回更新后的文档 });
  • 哦,好的,这就是方法“findByIdAndUpdate”不调用 prev 保存事件的问题。您需要获取模型,修改值并保存
猜你喜欢
  • 1970-01-01
  • 2014-05-14
  • 1970-01-01
  • 2021-06-04
  • 2019-07-17
  • 2014-06-09
  • 2016-12-11
  • 2021-01-09
  • 2013-04-24
相关资源
最近更新 更多