javascript - express-jwt-blacklist 抛出一个错误,例如 Error: JWT missing tokenId claimsub in my code
问题描述
我正在开发 MEAN 堆栈应用程序。对于会话身份验证,我使用express-jwt。
我的代码与 express-jwt 令牌配合得很好,但是当我注销时,我想删除 jwt 令牌/在黑名单中添加令牌。
因此,当我将express-jwt-blacklist与 jwt 令牌一起应用时,它会引发错误。错误:JWT missing tokenId claimsub
我的工作代码
=> In middleware / config file
const expressJWT = require("express-jwt");
CONFIG.JWTTOKENALLOWACCESS = expressJWT({
secret: CONFIG.JWTTOKENKEY,
userProperty: 'payload'
});
=> In routing file
router.route("/get-post-list").get(CONFIG.JWTTOKENALLOWACCESS, PostCtrl.getPostList);
我不工作的代码(应用 express-jwt-blacklist 后)
=> In middleware / config file
const expressJWT = require("express-jwt");
const blacklist = require('express-jwt-blacklist');
CONFIG.JWTTOKENALLOWACCESS = expressJWT({
secret: CONFIG.JWTTOKENKEY,
userProperty: 'payload',
isRevoked: blacklist.isRevoked
});
=> In routing file
router.route("/get-post-list").get(CONFIG.JWTTOKENALLOWACCESS, PostCtrl.getPostList);
错误抛出
error: "JWT missing tokenId claimsub"
请帮我解决这个问题。
解决方案
通过在 blacklist.configure 中添加 tokenId 解决了问题,如下所示
=> In middleware / config file
const expressJWT = require("express-jwt");
const blacklist = require('express-jwt-blacklist');
blacklist.configure({
tokenId: 'jti',
// strict: true,
// store: {
// type: 'memcached',
// host: 'localhost',
// port: 3001,
// keyPrefix: 'mywebapp:',
// options: {
// timeout: 1000
// }
// }
});
CONFIG.JWTTOKENALLOWACCESS = expressJWT({
secret: CONFIG.JWTTOKENKEY,
userProperty: 'payload',
isRevoked: blacklist.isRevoked
});
=> In routing file
router.route("/get-post-list").get(CONFIG.JWTTOKENALLOWACCESS, PostCtrl.getPostList);
确保您必须在 jwt 登录时设置 jti 参数/字段,如下所示
const randToken = require('rand-token');
const jwt = require("jsonwebtoken");
...
...
...
user.myToken = jwt.sign({
jti : user._id + "_" + randToken.generator({ chars: '0-9' }).generate(6);
first_name : user.first_name,
last_name : user.last_name,
...
...
...
}, jwt token key, {
expiresIn: '7d' //7 days
});
推荐阅读
- dynamic - 计算从 L 到 R 的所有数字,使得二进制表示中恰好有一个零。我对数字 dp 主题非常陌生
- c++ - 在c ++ float中使用小数点前后的值?
- reactjs - React Redux FireStore - FireStore 集合中的更改不会反映在我的屏幕上,除非我刷新
- mongodb - MongoDB 聚合 - 按多个键分组,每个级别的分组都有计数
- c# - 动态视图组件菜单的 LINQ 语句问题
- javascript - 为什么在 JavaScript 中复制/粘贴或分配给表单输入元素时,字符串的许多字符会发生变化
- python - 使用 BeautifulSoup 查找 Xbox Game Pass 游戏时缺少数据
- hdfs - HBase:Minor 和 Major Compaction 的区别
- ios - XCODE:用户完成搜索后,如何从我的搜索栏中隐藏光标?
- python - TypeError:当我在控制台中输入命令时,需要一个类似字节的对象,而不是“str”