Невозможно проверить, доступен ли токен JWT для каждого маршрута в узле js

У меня есть приложение узла. Когда клиент направляется к ('/login') и использует действительные учетные данные, я генерирую токен JWT с некоторым сроком действия и маршрутами на следующую страницу. И если пользователь пытается получить доступ к любому маршруту, например: ('/home') сразу после входа в систему, если срок действия токена не истек, он должен иметь возможность маршрутизировать напрямую. Если срок действия токена истек, мне нужно перейти к ('/login').

Но в настоящее время он работает частично, если токен доступен, он может напрямую перейти к ('/home). Но когда я открываю тот же маршрут в совершенно другом окне браузера/инкогнито, он все еще может маршрутизировать и берет предыдущий токен. Которого быть не должно и он должен быть перенаправлен на ('/login'). Как мы можем сделать этот сценарий.

Ниже мой код, который я пробовал

const SECRET = 'server secret';
var token;
router.post('/auth', passport.authenticate(  
  'local', {
   session: false
  }),generateToken, inserttoken,respond);
function generateToken(req, res, next) {  
   token = jwt.sign({
   id: req.user.id,
   },SECRET, {
    expiresIn: 60
  });
   req.token = token;
   next();
 }
 //In inserttoken() Iam inserting token value in db.
 router.get('/home', function(req, res){
    jwt.verify(token, 'server secret', function(err, decoded) {
      if (err) {
        console.log("token expired");
        res.redirect('/');
      } 
      else{
        res.render('index.html');
      } 
   });
});

Любая помощь приветствуется. Заранее спасибо!


person hammy    schedule 05.01.2018    source источник


Ответы (1)


Это предполагаемое поведение. Думайте о JWT как о ключе, а о своем REST API — как о замке. Когда кто-то приходит с ключом, чтобы открыть замок, замок будет проверять только ключ, правильный он или нет. Но замок не будет проверять, является ли человек, несущий этот ключ, правильным человеком.

Вот что происходит и здесь. JWT — это просто ключ. Он не передает REST API информацию о клиенте (в вашем случае браузере), который отправляет запросы с этим ключом. REST API просто проверяет ключ и разрешает/отклоняет запрос.

(Этот ответ основан на предположении, что вы отправляете тот же ключ, который вы получили из предыдущего браузера, в браузере в режиме инкогнито)

person Ishan Thilina Somasiri    schedule 05.01.2018