Итак, я пытаюсь сделать авторизацию для маршрутов с JWT, все работает, если используется на маршрутах.
app.get('/user/list', jwtMiddleware, action);
И содержимое jwtMiddleware (более или менее):
var token = req.headers.authorization;
// decode token
if (token) {
// verifies secret and checks exp
jwt.verify(token, process.env.SECRET_TOKEN, function(err, decoded) {
if (err) {
return res.status(401).send({
success: false,
message: 'Sign in to continue.'
});
} else {
// if everything is good, save to request for use in other routes
next();
}
});
} else {
// if there is no token
// return an error
return res.status(401).send({
success: false,
message: 'Sign in to continue.'
});
}
это работает, но у меня есть эти файлы изображений в папке uploads / , доступной по / upload / image-1.jpg , и я хочу запретить прямой доступ к /upload/image-1.jpg с использованием подстановочных маршрутов app.get('/upload*', jwtMiddleware, action);
, затем я пытаюсь получить доступ к случайному маршруту с upload , например / upload / test, промежуточное программное обеспечение JWT работает. Но если я явно наберу / upload / image-1.jpg , браузер просто покажет изображение, это похоже на промежуточное ПО или маршрутный символ ( / upload *), к которому нет доступа (консоль .log внутри промежуточного ПО даже не сработало).
Ранее я использовал restify и restify-jwt-middleware , он мог бы без проблем справиться с этим делом, но в express Я не могу понять, почему это не работает. Возможно, потому что restify-jwt-middleware автоматически регистрирует все маршруты в проверку jwt, тогда как express необходимо объявлять каждый маршрут с помощью промежуточного ПО jwt вручную.
есть что-нибудь, что я пропустить в этом случае? спасибо.