我正在使用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
前缀,我希望中间件仅检查令牌。在此先感谢:)