Я не знаю, возможен ли точный запрос в заголовке, но если нет; я был бы очень признателен за альтернативное решение.
У меня есть этот метод предварительного сохранения mon goose
ownerSchema.pre("save", function(next) {
const owner = this;
bcrypt.genSalt(10, function(err, salt) {
bcrypt.hash(owner.password, salt, function(err, hash) {
// Store hash in your password DB.
owner.password = hash;
next();
});
});
});
Когда я сохраняю нового пользователя (владельца), ха sh создается успешно и все хорошо>
Проблема возникает при входе в систему. при входе в систему я генерирую jwt с помощью пользовательского метода mon goose, как показано ниже
ownerSchema.methods.generateToken = function(cb) {
var owner = this;
var token = jwt.sign(
{
_id: owner._id,
username: owner.username,
email: owner.email,
category: owner.category === 0 ? false : true,
phones: owner.phones,
address: owner.address
},
config.SECRET,
{ expiresIn: "1h" }
);
owner.token= token;
owner.save(function(err,owner){
if(err) return cb(err);
cb(null,owner);
})
};
, как вы видите, я генерирую токен, чтобы отправить его в «res», и в то же время добавляю новый токен в запись в базе данных. все работает нормально до сих пор, и ответ возвращается успешно>
НО !! в то время как я выполнил save () в функции создания токена, чтобы сохранить токен >>, предыдущая функция pre (save) снова запустилась, так что для поля пароля генерируется новый ха sh.
когда я попробуйте войти снова, пароль уже изменился с вызова функции хеширования перед сохранением при генерации токена при первом входе в систему.
Есть ли обходной путь для решения этой проблемы?