Из документации express-jwt-permissions
Это промежуточное ПО предполагает, что у вас уже есть промежуточное ПО для аутентификации JWT, такое как express-jwt.
И затем трассировка в направлении express-jwt
документация, с первым примером:
var jwt = require('express-jwt');
app.get('/protected',
jwt({secret: 'shhhhhhared-secret'}),
function(req, res) {
if (!req.user.admin) return res.sendStatus(401);
res.sendStatus(200);
});
И, связавшись с возникшей ошибкой, можно с уверенностью сказать, что промежуточное ПО express-jwt-permissions
ожидает заполненное поле req.user
со значением объекта (тогда яна самом деле проверил их исходный код https://github.com/MichielDeMey/express-jwt-permissions/blob/master/index.js#L11 и доказал, что это так).
Так что мое предложение будет либо использовать express-jwt
, который работает за вас и, как известно, работает с express-jwt-permissions
или заполните req.user
объект в вашем промежуточном программном обеспечении verifyToken
самостоятельно (требуется декодирование JWT), что-то вроде:
// decode JWT
// get decoded token.permissions
req.user = {
permissions: token.permissions
};
Перед вызовом next()
для следующего промежуточного программного обеспечения.
Обратите внимание, что вы также можете настроить express-jwt-permissions
, чтобы ожидать, что поле будет отличаться от user
(но все равно нужно жить в пространстве имен req
экспресс-жизненного цикла промежуточного программного обеспечения), а также другое имячем permissions
поле внутри полезной нагрузки токена.Смотрите https://www.npmjs.com/package/express-jwt-permissions#configuration для деталей.Но в любом случае, суть в том, что вам сначала нужно будет декодировать токен.