快速jwt:快速拒绝缺少基本属性的jwt

快速jwt:快速拒绝缺少基本属性的jwt,jwt,express-jwt,Jwt,Express Jwt,我正在使用ExpressJWT创建中间件,jwtCheckMiddleware: function getTokenFromRequest(req) { ... throw Boom.badRequest("JWT missing") } async function isNotRevokedCallback(req, payload, done) { ... } const jwtCheckMiddleware = expressJwt({ secret: ...., cre

我正在使用ExpressJWT创建中间件,
jwtCheckMiddleware

function getTokenFromRequest(req) {
 ...
 throw Boom.badRequest("JWT missing")
}

async function isNotRevokedCallback(req, payload, done) {
 ...
}

const jwtCheckMiddleware = expressJwt({
  secret: ....,
  credentialsRequired: true,
  isRevoked: isNotRevokedCallback,
  getToken: getTokenFromRequest
})
在开发的某个阶段,JWTs发行时缺少JTI财产。新发行的代币持有JTI财产

缺少JWT的请求很快被拒绝
getTokenFromRequest
引发错误。这很有效

一个带有旧JWT(缺少JTI)的请求刚好超时

JTI上的
isNotRevokedCallback
内有一个空检查;当JTI未定义时,我抛出一个错误。是否
expressJwt
中间件构造函数没有正确捕获此错误,导致超时


isNotRevokedCallback
是松散地基于的,根据文档,
isRevoked
函数回调应该有
函数(请求,有效载荷,完成)的签名
。作为
done
传递的参数反过来是一个具有签名
函数(err,reversed)
的函数,在检查令牌是否已撤销时应调用该函数

如果所讨论的JWT没有
jti
声明,并且您需要触发一个错误,那么您应该调用
done(new yourror())
,以发出发生错误的信号


您没有包括您的实际实现,因此无法确定这是原因所在,但是,它似乎确实是一个很好的候选者。

谢谢!
done
回调是关键点。成功案例是
done(null,false)
,失败案例是
done(Boom.wrap(err))
,因为
中捕获的错误是NotRevokedCallback