在node.js上使用bcrypt问题哈希密码

问题描述 投票:0回答:1

我有下面的代码。我正在尝试在注册时哈希管理员密码。密码最初通过mongoose模式设置为默认值。以下是我的代码。但它不是哈希。

 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个回答
0
投票

这是因为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();
  }
})
© www.soinside.com 2019 - 2024. All rights reserved.