Реализация jwt-разрешений на NodeJS - UnauthorizedError - PullRequest
0 голосов
/ 20 сентября 2018

Я новичок в использовании Nodejs, но признаюсь, что мне нравится, я использую токены Jwt для аутентификации пользователей, просто, они регистрируют и выигрывают токен.но я хочу поставить разрешения на маршруты, я читал о express-jwt-permissions, но используя его в своем приложении, я получаю следующую ошибку в POSTMAN: UnauthorizedError: пользовательский объект "user" не найден.Проверьте свою конфигурацию.

1002 * customerRoutes.js
const router = require('express').Router();

var jwt = require('jsonwebtoken');
var guard = require('express-jwt-permissions')()
const customerController = require('../controllers/customerController');




  function verifyToken(req, res, next) {
  // Get auth header value
  const bearerHeader = req.headers['authorization'];
  // Check if bearer is undefined
  if(typeof bearerHeader !== 'undefined') {
  // Split at the space
   const bearer = bearerHeader.split(' ');
   // Get token from array
   const bearerToken = bearer[1];
     // Set the token
    req.token = bearerToken;
    // Next middleware
   next();
   } else {
   // Forbidden
   res.sendStatus(403);
  }

  }

   router.post('/posts',verifyToken,guard.check('admin'),
   customerController.posts);

   module.exports = router;

это как мой маркер выглядит: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJwZXJtaXNzaW9ucyI6WyJhZG1pbiJdLCJpYXQiOjE1Mzc0MDg0NzMsImV4cCI6MTUzNzQ0ODQ3M30.8l1vezWWz3Gmb5M3N0DgsmCl-nZHK2c3GP-dKzYDLRU

1 Ответ

0 голосов
/ 20 сентября 2018

Из документации 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 для деталей.Но в любом случае, суть в том, что вам сначала нужно будет декодировать токен.

...