Как перенаправить неаутентифицированному пользователю с помощью express-jwt

Это мое первое экспресс-приложение. Я пытаюсь реализовать аутентификацию для некоторых маршрутов. В идеале, если пользователи не аутентифицированы, они будут перенаправлены на домашнюю страницу. Итак, я написал это промежуточное ПО:

var jwt = require('express-jwt');

app.get('/protected',
  jwt({secret: 'shhhhhhared-secret'}),      //express-jwt middleware
  function(req, res, next) {                //redirection middleware
    if(!req.user._id){
      console.log('authentication failed')
      res.redirect('/home')
    }else{
      next()
    };
  });

Если пользователь авторизован, код работает. Однако, если пользователь не вошел в систему, браузер просто покажет несанкционированную ошибку 401. Перенаправления нет. Процесс завершился неудачно на промежуточном программном обеспечении express-jwt и не продолжился на моем промежуточном программном обеспечении перенаправления.

Есть ли какая-то конфигурация, которую мне нужно установить в функции jwt? Или есть способ установить глобальное перенаправление, если встречается 401.


person Sydney    schedule 12.07.2016    source источник


Ответы (1)


Если пользователь не аутентифицирован, выдается ошибка, и node.js останавливает выполнение кода. После этого вы сможете поймать его в экспресс-обработчике ошибок:

  app.use(function(err, req, res, next) {
    if(401 == err.status) {
        res.redirect('/home')
    }
  });
person Boris Siscanu    schedule 12.07.2016
comment
Должен ли этот код размещаться перед промежуточным программным обеспечением аутентификации или после? - person Sydney; 13.07.2016
comment
Это промежуточное ПО должно быть последним. Не забывайте обрабатывать другие ошибки в if else. Вы можете отправить смс или электронное письмо с описанием ошибки или просто сохранить их в базе данных. - person Boris Siscanu; 13.07.2016