Я пытаюсь внедрить систему аутентификации для экспресс-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;
вы не выполнили никаких действий, 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)
}
Я думаю, что проблема заключается в асинхронном характере функции jwt.sign() - она продолжает подписывать токен, пока он продолжает свой код, - возвращает пустой json. Вам нужно дождаться завершения jwt.sign() перед res.json({токен}) или сделать что-то, пока происходит волшебство jwt.
Надеюсь, я помог :)
ps. Лучше использовать обещания, поэтому ваш код будет более чистым, и вы не попадете в адский аддон и для лучшей обработки ошибок.