Существует несколько более подходящих подходов для обработки требований промежуточного программного обеспечения, которые обычно используются вместо предлагаемого вами метода:
Включайте ваше промежуточное программное обеспечение для аутентификации только в те маршруты, которые вам требуются:
const authenticationMiddleware = (req, res, next) => {
// your login check logic
}
router.get('/api/users/me', authenticationMiddleware, (req, res, next) => {
// your route logic, this endpoint now requires you to be logged in, as you have specified your authentication middleware in the declaration,
})
router.get('/api/profiles/:profileId', (req, res, next) => {
// your route logic, this endpoint does not require you to be logged in as you have not put the middleware in the route delcaration
})
Или добавьте промежуточное программное обеспечение для аутентификации в зависимости от того, где называются ваши маршруты:
router.get('/api/profiles/:profileId', (req, res, next) => {
// your route logic, this endpoint does not require you to be logged as we have not told our router to use the middleware yet
})
router.use(authenticationMiddleware)
router.get('/api/users/me', (req, res, next) => {
// your route logic, this endpoint now requires you to be logged in, as the router has been told to use the middleware at this point.
})
Почему используются эти методы?Подумайте обо всех вызовах router
или app
, которые вы делаете, как о добавлении в стек, который экспресс использует для обработки вызовов на ваш сайт или API.Когда он работает через поиск маршрутов, он будет вызывать любое промежуточное ПО, которое он находит на своем пути.
Это решает проблему необходимости объявлять список или массив маршрутов, которые требуют или не требуют определенного этапа аутентификации и т. Д.
Вам также необходимо убедиться, чтопозвоните next()
в ваше промежуточное ПО, если вы хотите, чтобы оно работало, так как это говорит Express, чтобы он продолжал просматривать все имеющиеся у него маршруты / промежуточное ПО.