Я только начал проект, в котором мне нужно использовать Node + несколько вещей, связанных с этим, и я немного смущен! Я использую JWT для аутентификации, в частности, я создал свой проект следующим образом:
api
|---teams
|----teams.controller.js
|----teams.router.js
|----teams.service.js
|---users (same as team)
auth
|---token_validation.js
other things
|---other things
Я использую token_validation. js для JWT для проверки пользователя при входе в систему и, похоже, он работает (проверено с помощью Почтальон)
const jwt = require("jsonwebtoken");
module.exports = {
checkToken: (req, res, next) => {
let token = req.get("authorization");
if (token) {
// Remove Bearer from string
token = token.slice(7);
jwt.verify(token, process.env.JWT_KEY, (err, decoded) => {
if (err) {
console.log("err: " + err);
return res.json({
success: 0,
message: "Invalid Token..."
});
} else {
req.decoded = decoded;
next();
}
});
} else {
// other code
}
}
};
Мне нужно вставить новую команду в БД (MariaDB), и пользователь может создать новую команду после входа в систему. Моя проблема в том, что при использовании сеанса в Java, например, я могу легко установить дополнительные функции, такие как имя пользователя вошедшего в систему пользователя, и когда мне нужно знать, какое имя пользователя вошедшего в систему пользователя, я могу взять его из сеанса
String username = (String) session.getAttribute("username");
Я не понимаю, как сделать то же самое с Node / JWT. Что мне нужно сделать, так это после входа в систему мне нужно сохранить user_id, и когда пользователь создаст новую команду, мне нужно отправить в БД user_id с другими данными (если токен все еще действителен).
const {
create
} = require("./teams.service");
module.exports = {
createTeam: (req, res) => {
const body = req.body;
// here I need to check if token still valid
// if yes -> take user id and send it to DB with
// other data
create(body, (err, results) => {
if (err) { // if fails
// handle
}
return res.status(200).json({ // success
success: 1,
data: results
});
});
},
}
I думал, что могу добавить его в user.controller. js при входе в систему:
if (result) {
results.password = undefined;
const jsontoken = sign({ result: results }, process.env.JWT_KEY, {
expiresIn: "1h",
user_id: get somehow //error
});
// other code
}
, но это дает мне ошибку, говорит мне, что я не могу добавить user_id для подписи . Может ли кто-нибудь подсказать мне, как правильно хранить и получать такие данные и использовать их при необходимости, пока у пользователя все еще есть действующий токен, чтобы оставаться в системе?