我是新的nodejs,expressjs和尝试通过创建一个中间件使用express-jwt包验证路由。一切都工作正常的GET路由,但当我访问POST路由,并试图撤销一个令牌,它返回我500内部服务器错误没有任何消息。我很困惑,这背后的主要原因是什么。所以伙计们请帮助我,如果可能的话。我的代码如下。
const { expressjwt: expressJwt } = require('express-jwt');
function authJwt() {
const secret = process.env.secret;
const api = process.env.API_URL;
return expressJwt({
secret,
algorithms: ['HS256'],
isRevoked: isRevoked
}).unless({
path: [
{url: /\/api\/v1\/products(.*)/ , methods: ['GET', 'OPTIONS'] },
{url: /\/api\/v1\/categories(.*)/ , methods: ['GET', 'OPTIONS'] },
`${api}/users/login`,
`${api}/users/register`,
]
})
}
async function isRevoked(req,payload,done) {
if(!payload.isAdmin) {
return done(null, true);
}
done();
}
module.exports = authJwt
4条答案
按热度按时间bnlyeluc1#
我是这样解决这个问题的:
isRevoked接收undefined或true。因此,如果您发现用户不是管理员,则返回undefined,否则返回true
u0sqgete2#
上面的代码在我这边工作得很好,只是切换了undefined和true。
vvppvyoh3#
我们同样在教程中我解决使用此代码
vlf7wbxs4#
在Postman中运行该API时,该代码“localhost:3000/api/v1/products”返回授权错误,即使承载令牌已加载。