express-jwt 7.7.5中isRevoked报done is not a function问题排查
问题解决:express-jwt 7.7.5中isRevoked出现"done is not a function"错误
问题原因
express-jwt 7.x版本对isRevoked方法的API做了变更,不再支持传入done回调函数,而是要求该方法返回一个Promise(或直接返回布尔值):
- 返回
true表示token被吊销(拒绝访问) - 返回
false表示token有效(允许访问)
你的代码中仍在使用旧版本的done回调写法,这就是报错的直接原因。
修复后的代码
将isRevoked函数修改为如下形式,去掉done回调,直接返回布尔值:
async function isRevoked(req, payload) { console.log(payload); // 非Admin用户直接返回true,拒绝访问 if (payload.isAdmin === false) { console.log('Not Admin'); return true; } console.log('Admin'); // Admin用户返回false,允许访问 return false; }
额外注意事项
- 确保你的token payload中确实包含
isAdmin字段,否则会导致判断逻辑失效 - 你的路由规则中已经对产品的GET请求开放权限,只有POST/PUT等修改类请求会触发JWT校验,符合你"仅允许Admin发布产品"的需求
内容的提问来源于stack exchange,提问作者Anuj Todankar
相关产品推荐
相关产品推荐

