Проблема хеширования пароля с помощью bcrypt на node.js - PullRequest
0 голосов
/ 26 февраля 2019

У меня есть код ниже.Я пытаюсь хэшировать свой пароль администратора, когда они регистрируются.Пароль изначально устанавливается по умолчанию через схему 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();
        });
    });

});

1 Ответ

0 голосов
/ 26 февраля 2019

Это потому, что метод 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();
  }
})
...