#node.js #angular #express #jwt
#node.js #угловой #экспресс #jwt
Вопрос:
У меня возникли проблемы с Jwt и особенно ошибка «Недопустимая подпись».
Я генерирую токен после входа пользователя в систему (jsonwebtoken).
userSchema.methods.generateJwt = function() {
var expiry = new Date();
//expiry.setDate(expiry.getDate() 7);
expiry.setDate(expiry.getDate() 2);
return jwt.sign({
_id: this._id,
username: this.username,
name: this.lastname,
exp: parseInt(expiry.getTime() / 1000),
}, process.env.SRCT, {
algorithm: 'HS256'
});
}
Затем я создаю промежуточное программное обеспечение express-jwt, чтобы добавить его в маршруты :
var auth = jwt({
secret: process.env.SRCT,
userProperty: 'payload'
});
Используется следующим образом :
router.get('/', auth, ctrlUser.slash);
Созданный мной JWT передается в интерфейсном запросе (на предъявителя авторизации) и совпадает с тем, который был создан сразу после входа в систему, в соответствии с отладчиком.
Но, к сожалению, у меня все еще возникает ошибка {«message»: «UnauthorizedError: invalid signature»} после каждого запроса к серверной части nodejs.
Может кто-нибудь сказать мне, что я делаю не так, чтобы иметь недопустимую подпись?
Заранее спасибо
Ответ №1:
Где ваша функция проверки? Вам нужно проверять при каждом запросе, отправленном в защищенную область, действительно ли токен действителен, jwt предоставляет функцию verify для этого.
Ответ №2:
Похоже, вы не анализируете заголовки запроса для токена и не используете verify()
функцию библиотеки JWT для этого. ваше промежуточное программное обеспечение аутентификации должно выглядеть примерно так
module.exports = (req, res, next) => {
try {
//parse the token from Authorization header (value of "bearer <token>")
let token = req.headers.authorization.split(" ")[1];
//verify the token against your secret key to parse the payload
const tokenData = jwt.verify(token, process.env.JWT_SECRET_KEY);
//add the data to the request body if you wish
req.user = tokenData;
next();
} catch (err) {
res.status(401).json({
message: "Unauthorized access error!",
});
}
};