J'utilise un crochet de pré-sauvegarde avec bcrypt pour crypter les mots de passe sur le système. Cela fonctionne très bien lors de la création ou de la modification d'un mot de passe. Le problème est qu'il semble re-crypter le mot de passe chaque fois que je change et enregistrer un champ différent, par exemple e-mail.Mongoose change de mot de passe chaque fois que j'économise avec le crochet de pré-enregistrement
Probablement plus facile à expliquer avec du code. Voici le modèle:
const UserSchema = new Schema({
email: {
type: String,
required: true,
lowercase: true,
unique: true,
trim: true
},
password: {
type: String,
required: true
}
})
Et le crochet:
UserSchema.pre('save', function(next){
const user = this;
console.log(user);
bcrypt.genSalt(10, 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();
})
})
});
Et voici mon code pour mettre à jour l'adresse e-mail:
module.exports = function(req, res){
User.findOne({ _id: req.body.user}, function(err, doc){
if(err){
console.log(err);
return;
}
doc.email = req.body.data;
doc.save(function(err, returnData){
if (err){
console.log(err);
return;
}
res.send(returnData);
})
})
}
Alors, quand je l'appelle doc.save
dans le dernier exemple , il met à jour l'adresse e-mail comme prévu mais il rechiffre également le mot de passe, ce qui signifie que si l'utilisateur se déconnecte, il ne peut plus se reconnecter.
Quelqu'un peut-il vous aider à contourner ce problème?
Haha, je me suis juste et ajouté ma propre réponse! J'ai cependant marqué le vôtre comme la bonne réponse, pour vous remercier d'avoir pris le temps! – Chris
Haha, merci Chris –