【发布时间】:2020-11-26 10:48:26
【问题描述】:
我刚开始一个项目,我必须使用 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 在登录时验证用户,并且似乎可以正常工作(通过 Postman 验证)
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 中使用 Session 时,例如我可以轻松设置登录用户的用户名等附加信息,当我需要知道登录用户的用户名是什么时,我可以从会话中获取它
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
});
});
},
}
我想我可以在用户登录时将其添加到 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 来签名。谁能告诉我存储和获取此类数据的正确方法,并在用户仍然拥有有效令牌以保持登录状态时在需要时使用它们?
【问题讨论】:
标签: node.js authentication jwt