MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Réinitialisation du mot de passe dans NodeJS

Je n'ai pas (ou n'ai pas) trouvé de problème avec votre code, mais j'ai une suggestion pour tracer le bogue.

Ce bloc de code est risqué. Vous pouvez accidentellement mettre à jour le champ du mot de passe et déclencher le processus de rehachage du mot de passe.

UserSchema.pre('save', function(next) {
   var user = this;
   var SALT_FACTOR = 12; // 12 or more for better security

   if (!user.isModified('password')) return next();

   console.log(user.password) // Check accident password update

   bcrypt.genSalt(SALT_FACTOR, function(err, salt) {
      if (err) return next(err);

      bcrypt.hash(user.password, salt, null, function(err, hash) {
         if (err) return next(err);
         user.password = hash;
         next();
      });
   });
});

Mettre un console.log juste après le if (!user.isModified('password')) pour vérifier la mise à jour inattendue du mot de passe. Maintenant, réessayez d'oublier le mot de passe et voyez s'il y a un bogue là-dedans.

*TD;LR Séparez le mot de passe de mise à jour dans une nouvelle méthode au lieu de le mettre dans la pré-sauvegarde car vous pourriez accidentellement mettre à jour un nouveau mot de passe avec d'autres champs

*Mise à jour :Merci #imns pour suggérer un meilleur nombre SALT_FACTOR.