Есть несколько вариантов того, как/где запускать ПО промежуточного слоя аутентификации.
1) Вы можете запустить его сразу же после того, как будут определены любые неаутентифицированные маршруты. Это даст вам ошибку отсутствия аутентификации для любого маршрута, будь то реальный маршрут или нет, кроме нескольких маршрутов, на которые пользователю разрешено переходить без аутентификации.
2) Вы можете вручную добавить промежуточное ПО к каждому определенному маршруту, который должен иметь аутентификацию, например:
app.get('/something', yourAuthMiddleware, yourRouteHandler);
Это запустит проверку авторизации только на фактически определенных маршрутах. Это позволяет вам выдавать ошибку 404, а не ошибку авторизации для маршрутов, которые не определены.
Преимущество первого варианта (который, по сути, у вас есть сейчас) заключается в том, что неаутентифицированный пользователь даже не может узнать, какие маршруты определены, а какие нет. Если они не аутентифицированы, они вообще не входят, за исключением пары маршрутов, на которые им разрешено. На мой взгляд, это правильный дизайн.
Второй вариант позволяет указать ошибку 404 для маршрута, который не определен, но требует ручного добавления аутентификации к каждому маршруту или к каждому маршрутизатору, для которого требуется аутентификация. Это позволяет пользователю, не прошедшему проверку подлинности, узнать, какие маршруты определены, а какие нет.
Да, извините, что не указал это в первую очередь. Это промежуточное программное обеспечение должно убедиться, что пользователь передал токен доступа в заголовках запроса или нет.
Ну, вы должны решить, что вы хотите, чтобы произошло в этом случае. Мне кажется, что отправка статуса о том, что они не авторизованы должным образом (даже если это
/wrong
), является правильным дизайном. Это также не позволяет неавторизованным пользователям узнать что-либо о ваших URL-адресах и о том, какие из них работают, а какие нет.Но проблема все еще существует. Есть ли способ предварительно проверить маршруты? Если бы я мог. Или есть другой подход к этому.
Какая проблема еще есть? Я не предлагал тебе что-то менять. Я думаю, что это правильный дизайн. Если вы хотите проверять только совпадающие маршруты, вам может потребоваться установить промежуточное ПО вручную для каждого отдельного маршрута.
app.use('/user', require('./routes/authenticate_user'), userDetails);
Ok. Спасибо за быстрые ответы, думаю, так и должно было быть