Я пытаюсь использовать токены JWT в проекте, над которым я сейчас работаю. Я пытаюсь использовать промежуточное ПО для проверки токена JWT перед передачей его следующему обработчику. Однако у меня есть странная проблема: я не получаю токен JWT в промежуточном программном обеспечении, но если я передаю его следующему обработчику, я получаю токен. Надеемся, что приведенный ниже пример объяснит это:
Я реализовал метод PING и некоторые записи, чтобы показать вам, что происходит. Моя настройка выглядит так:
this._express.use((req, res, next) => {
console.log('AUTH');
return jwt.verify(req.headers['x-access-token'], 'mysecret', (err, decoded) => {
if (err) {
console.log(`ERROR: ${err}`);
return false;
}
console.log('DECODED');
return next();
});
});
//Health Check
this._express.get('/ping', (req, res) => {
console.log(`PING`);
return res.status(200).send('pong');
});
Если я выполню этот кусок кода, вывод будет:
node_1 | AUTH
node_1 | ERROR: JsonWebTokenError: jwt must be provided
Однако, если я использую обратный вызов next () в промежуточном программном обеспечении:
this._express.use((req, res, next) => {
console.log('AUTH');
next(); // This is the only thing that is different
return jwt.verify(req.headers['x-access-token'], 'mysecret', (err, decoded) => {
if (err) {
console.log(`ERROR: ${err}`);
return false;
}
console.log('DECODED');
return next();
});
});
//Health Check
this._express.get('/ping', (req, res) => {
console.log(`PING`);
return res.status(200).send('pong');
});
Вывод следующий:
node_1 | AUTH
node_1 | ERROR: JsonWebTokenError: jwt must be provided
node_1 | AUTH
node_1 | PING
node_1 | DECODED
У меня нет большого опыта работы с токенами JWT, и, пожалуйста, извините, если это что-то очевидное.