Примените jwt на экспресс-маршрутах без сообщения об ошибке - PullRequest
0 голосов
/ 10 сентября 2018

Есть ли способ применить jwt на всех моих экспресс-маршрутах с помощью промежуточного программного обеспечения, но вместо того, чтобы выдавать ошибку, если токен отсутствует или недействителен, заполните req.user с помощью null

Мое текущее решение:

var jwt = require('express-jwt');
var router = express.Router();

router.use(jwt({ secret: 'secret'}));

///////////////////////////////////////////
// This is the piece I would like to avoid
router.use((err, req, res, next) => {
    if (err.code === 'UnauthorizedError') {
        req.user = null;
    }
    next();
})
///////////////////////////////////////////

router.use('/products', require('./products/products_router'));

На моем маршруте я хотел бы иметь req.user === null, если токен отсутствует или недействителен, и правильный req.user, если токен действителен. В настоящее время без фрагмента кода, который я хочу удалить, мой маршрут не выполняется без токена. И если я использую unless(), req.user не заполняется даже с действительным токеном

1 Ответ

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

Согласно документации , вы можете указать свойство «credentialsRequired» в объекте параметров:

app.use(jwt({
  credentialsRequired: false
}));

Вы можете увидеть, как это работает здесь, в оригинальном исходном коде:

if (!token) {
  if (credentialsRequired) {
    return next(new UnauthorizedError('credentials_required', { message: 'No authorization token was found' }));
  } else {
    return next();
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...