JS-приложение моего узла включает в себя настройку Jason Web Token для заголовка ответа при входе в систему, чтобы я мог использовать этот JWT для проверки пользователя при доступе к запрещенным страницам.
Мой вопрос заключается в том, как сохранить этот заголовок. В настоящее время я устанавливаю заголовок при регистрации и входе в систему, используя такой код:
// Login Handle
router.post("/login", async (req, res, next) => {
const user = await User.findOne({ email: req.body.email });
if (!user) return res.status(400).send("Email or password is incorrect");
const validPassword = await bcrypt.compare(req.body.password, user.password);
if (!validPassword) return res.status(400).send("Invalid email or password.");
const token = user.generateAuthToken();
res.set('x-auth-token', token).redirect('/dashboard');
});
Вот мое промежуточное ПО аутентификации, которое я пытаюсь заставить работать:
function auth(req, res, next) {
const token = req.header('x-auth-token');
if(!token) return res.status(401).send("Access denied. No token provided");
// if the token is valid it will return the decoded payload
try {
const decoded = jwt.verify(token, jwtPrivateKey);
req.user = decoded;
next();
}
catch(ex) {
res.status(400).send("Invalid token.");
}
Я вижу на вкладке сети на инструментах Chrome Dev, что заголовок правильно устанавливается с помощью JWT. Однако, как только страница обновляется или я посещаю другую страницу, заголовок исчезает.
Нужно ли использовать res.set('x-auth-token', token).render('foo')
на каждом маршруте? Кажется, это не было бы отличным решением.
Может кто-нибудь сказать мне, что я делаю не так?