Я пытаюсь выполнить авторизацию JWT, но она возвращает Express. js страницу ошибки по умолчанию 404 (страница HTML не мой определенный обработчик ошибок) в КАЖДОМ запросе, когда авторизация прошла успешно.
Этого не произойдет, если токена нет или он недействителен. Несанкционированная ошибка и все маршруты работают нормально без заголовка токена.
Я очень подозреваю, что проблема в return next()
в authHandler
, но я не знаю причину.
Порядок промежуточного программного обеспечения в приложении. js:
//Authorization
app.use(authHandler);
//Routes
app.use(routes);
//Method 404 middleware
app.use(errorHandler.notFound);
//Generic error handler middleware
app.use(errorHandler.generic);
authHandler:
const jwt = require('jsonwebtoken');
exports.userHeader = async (req, _res, next) => {
if (req.headers && req.headers.authorization) {
jwt.verify(
req.headers.authorization,
process.env.JWT_SECRET,
(err, decode) => {
if (!err) {
req.user = decode;
return next();
}
}
);
}
req.user = undefined;
return next();
};
Защищенный маршрут:
posts.get('/', user_handler.login_required, post_controller.index);
login_required обработчик:
async (req, _res, next) => {
if (req.user) {
return next();
}
let error = new Error('Unauthorized');
error.status = 401;
return next(error);
};
Ответ об ошибке:
<!DOCTYPE html>
Error
Cannot GET /posts