промежуточное ПО express-jwt использует полные пути вместо подпутей при использовании с экспресс-маршрутизаторами - PullRequest
0 голосов
/ 14 декабря 2018

Я использую 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.Заранее спасибо:)

...