Я использую Node / Express.js для создания API.API присутствует в префиксе /api
, если префикс не установлен, то сервер Express вернет интерфейс Vue JS.Поэтому я хочу, чтобы express-jwt
использовался в качестве промежуточного программного обеспечения, только когда установлен префикс /api
.По этой причине я использую экспресс router
, выполняя app.use('/api, router)
.
. И в файле маршрутизатора я использую express.jwt
с синтаксисом "кроме", чтобы предотвратить любой несанкционированный доступ.
Я также решил включить express-jwt
в файл маршрутизатора, потому что я не хочу добавлять /api/somepath
в express-jwt.unless
, вместо этого я хотел бы, чтобы он использовал /somepath
и рассмотрелэто как /api/somepath
, потому что я использую его с маршрутизатором.
Мой файл маршрутизатора:
const router = require('express').Router()
const routeController = require('./routeController')
const ejwt = require('express-jwt')
const config = require('../config/config')
// Protected Routes
// Protect Routes
router.use(
ejwt({
secret: config.APP_SECRET,
getToken: req => {
const { token } = req.body
if (token) return token
return null
}
}).unless({
path: ['/', '/auth/generateToken']
})
)
router.use(function(err, req, res, next) {
if (err.name === 'UnauthorizedError') {
res.status(401).send({
status: false,
message: 'Access Forbidden'
})
} else {
next()
}
})
Это не сработало для меня.Всякий раз, когда я пытаюсь получить доступ к веб-интерфейсу с помощью /
, запускается промежуточное программное обеспечение express-jwt
, и я даже не могу получить доступ к своему веб-интерфейсу.Я могу заставить это работать, если я также предоставлю это все мои внешние интерфейсы.Это не очень хорошая идея, потому что во внешнем интерфейсе много путей.
Короче говоря, я хочу, чтобы промежуточное ПО проверяло токен только в том случае, если путь имеет префикс /api
.Заранее спасибо:)