当与Express路由器一起使用时,express-jwt中间件使用完整路径而不是子路径

时间:2018-12-13 21:26:44

标签: node.js api express jwt express-jwt

我正在使用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,相反,我希望它使用{{ 1}},并将其视为/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前缀,我希望中间件仅检查令牌。在此先感谢:)

0 个答案:

没有答案