express-jwt-blacklist выдает ошибку вроде как Ошибка: в моем коде отсутствует токен-идентификатор заявок в моем коде - PullRequest
0 голосов
/ 04 октября 2019

Я разрабатываю стековое приложение MEAN. для аутентификации сеанса я использовал express-jwt .

Мой код работает очень хорошо с токеном express-jwt, но когда я выхожу из системы, я хочу удалить токен jwt / добавить токен в черный список.

Поэтому, когда я применяю express-jwt-blacklist с токеном jwt, выдается сообщение об ошибке. * Мой рабочий код

=> 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"

Пожалуйста, помогите мне решить эту проблему.

1 Ответ

0 голосов
/ 09 октября 2019

Проблема решена путем добавления tokenId в blacklist.configure, как показано ниже

=> 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);

Убедитесь, что вы установили параметры jti / field во время входа в систему jwt, как показано ниже

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
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...