JWT не работает с экспресс-роутером

1

Я пытаюсь внедрить систему аутентификации для экспресс-REST API.

Я получил этот код для использования jsonwebtoken из учебника.

Мое аутентификационное ПО verifyToken, не работает. Пожалуйста помоги.

var express = require('express');
var router = express.Router();
var jwt = require('jsonwebtoken');
var models = require('../models');

function verifyToken(req, res, next) {
    var bearerHeader = req.headers['authorization'];
    if (typeof bearerHeader !== undefined) {

    } else {
        res.sendStatus(403)
    }
}

router.post('/tryjwt', verifyToken, (req, res, next) => {
    res.send('It worked');
});

router.get('/login', function (req, res, next) {
    const user = {
        id: 1,
        usename: 'ayoob',
        email: '[email protected]'
    }
    jwt.sign({ user: user }, 'secretkey', (err, token) => {
        res.json({ token: token })
    });
});

module.exports = router;
Теги:
express-jwt

2 ответа

0
Лучший ответ

вы не выполнили никаких действий, if (typeof bearerHeader !== undefined) истинно.

Убедитесь, что next вызывается так, чтобы текущее промежуточное ПО могло передавать управление следующему промежуточному программному обеспечению

поместите этот фрагмент кода внутри оператора if

try{
const decode = jwt.verify(bearerHeader, 'secretkey')
  //do something with the decode object 
   next()
}catch(err){
  res.sendStatus(403)
}
  • 0
    Спасибо большое, братан. Это сработало. :)
0

Я думаю, что проблема заключается в асинхронном характере функции jwt.sign() - она продолжает подписывать токен, пока он продолжает свой код, - возвращает пустой json. Вам нужно дождаться завершения jwt.sign() перед res.json({токен}) или сделать что-то, пока происходит волшебство jwt.

Надеюсь, я помог :)

ps. Лучше использовать обещания, поэтому ваш код будет более чистым, и вы не попадете в адский аддон и для лучшей обработки ошибок.

  • 0
    Я медленно изучаю асинхронное программирование. Спасибо за совет.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню