Я пытаюсь добавить форму сброса пароля в моем nodeJS бэкэнде (пока пользователь вошел в систему), однако у меня возникают некоторые проблемы с токеном.
Вот код
router.post("/password", (req, res) => {
const { currentPassword, newPassword, newPassword2 } = req.body;
const filter = { _id: req.user.id };
if (newPassword !== newPassword2) {
return res.status(400).json({ msg: "Passwords do not match" });
}
//Simple validation
if (!newPassword || !newPassword2) {
return res.status(400).json({ msg: "Please enter new password" });
}
User.findOne({ _id: new ObjectID(req.user.id) }).then(user => {
if (!user) return res.status(400).json({ msg: "User does not exists" });
bcrypt
.compare(currentPassword, user.password)
.then(isMatch => {
bcrypt.genSalt(10, (err, salt) => {
bcrypt.hash(newPassword, salt, (err, hash) => {
if (err) throw err;
User.findOneAndUpdate(
filter,
{ password: hash },
{ new: true },
(err, doc) => {
if (err) {
console.log(err);
return res.status(400).json({ msg: err });
}
res.json({});
console.log(doc);
}
);
});
});
})
.catch(res.status(400).json({ msg: "Current password does not match" }));
});
//Check for existing user
});
Вот промежуточное ПО, которое я использую
const config = require("config");
const jwt = require("jsonwebtoken");
function middlewareAuth(req, res, next) {
const token = req.header("x-auth-token");
//Check for token
if (!token)
return res.status(401).json({ msg: "No token, authorization denied" });
// return res.redirect("/login");
// Verify token
try {
const decoded = jwt.verify(token, config.get("jwtSecret"));
// Add user from payload
req.user = decoded;
next();
} catch (e) {
res.status(400).json({ msg: "Token is not valid" });
}
}
module.exports = middlewareAuth;
В настоящее время, когда это событие запускается, я получаю эту ошибку
Ошибка [ERR_HTTP_HEADERS_SENT]: Невозможно установить заголовки после они отправляются клиенту
Как мне это исправить? Кроме того, из-за того, что пользователь вошел в систему. Как мне удалить токен json у пользователя. Можно ли это сделать через бэкэнд? Или это должно быть сделано во внешнем интерфейсе (я использую реаги и редукс)
Любая помощь приветствуется!