私はシステム上のパスワードを暗号化するためにbcryptで保存前のフックを使用しています。パスワードを作成または変更するときにうまく動作します。問題は、電子メールなどの別のフィールドを変更して保存するたびに、パスワードを再暗号化しているように見えることです。Mongooseは、保存前のフックで保存するたびにパスワードを変更します。
おそらくコードで簡単に説明できます。こちらのモデルです:
const UserSchema = new Schema({
email: {
type: String,
required: true,
lowercase: true,
unique: true,
trim: true
},
password: {
type: String,
required: true
}
})
フック:
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();
})
})
});
そしてここでは、私のコードは、電子メールアドレスを更新することです:
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);
})
})
}
だから私は最後の例ではdoc.save
を呼び出すとき電子メールアドレスは意図した通りに更新されますが、パスワードも再暗号化されます。つまり、ユーザーがログアウトすると、再度ログインすることはできません。
誰でもこの問題を回避する方法をお手伝いできますか?
をハハ、私はそれを考え出し私自身の答えを加えました!私は正しい答えとしてあなたの印を付けましたが、時間をとっていただきありがとうございます! – Chris
ハハ、ありがとうクリス –