Проблема с данными, закодированными в jwt токене
У меня есть такая функция для декодирования токена которую я использую на клиенте
import jwtDecode from 'jwt-decode';
export const tokenDecode = () => {
const token = localStorage.getItem("authToken");
if(!token){
return false;
}
else{
const {currentUserId, currentUserRole, currentUserDepartment} = jwtDecode(token);
return {currentUserId, currentUserRole, currentUserDepartment};
}
}
Когда я использую эту функцию она отдаёт мне объект с пользовательскими данными console.log(tokenDecode()); получаю такой ответ в консоли браузера {currentUserId: 12, currentUserRole: 'Оператор', currentUserDepartment: 1}
Также у меня есть функция middleware, которая написана на expres и работает на сервере
const jwt = require('jsonwebtoken')
module.exports = function (req, res, next) {
if (req.method === "OPTIONS") {
next();
}
try {
const token = req.headers.authorization.split(' ')[1]; // получаем токен с фронта
if (!token) {
return res.status(401).json({message: "Не авторизован"});
}
console.log(jwt.decode(token))
const decoded = jwt.verify(token, process.env.SECRET_JWT_KEY);
req.user = decoded;
next();
} catch (e) {
res.status(401).json({message: "Не авторизован"})
}
};
Логика такая: функция получает токен через заголовок и верифицирует его, затем, если токен актуален мы должны передать в req.user те самые пользовательские данные (этот самый объект {currentUserId: 12, currentUserRole: 'Оператор', currentUserDepartment: 1}). Однако функция jwt.verify(token, process.env.SECRET_JWT_KEY); возвращает мне такой объект { iat: 1727107939, exp: 1727194339 }. Я не понимаю почему это так работает. Я декодирую один и тот же токен, но на клиенте мне возвращается правильный объект с пользовательскими данными, а на сервере возвращается { iat: 1727107939, exp: 1727194339 }, хотя по документации jwt.verify должна вернуть декодированные данные, зашифрованные в токене. Почему так? Как мне поместить в req.user объект {currentUserId: 12, currentUserRole: 'Оператор', currentUserDepartment: 1}, который должен быть закодирован в заголовке Bearer, прешедший с клиента?