node.js - 无法从经过身份验证的 POST 请求中获取用户名
问题描述
我正在构建一个 Node 和 Express API,但无法从经过身份验证的发布请求中获取用户名。我locals.user.username
在身份验证中间件中设置了 ,并且在发出 POST 请求时,我在请求中发送了该密钥,但是当我对同一文档发出 GET 请求时,我没有在响应中看到它。我设置的 locals 是一个包含用户电子邮件、密码和用户名的对象,我在 post 请求中设置了这些对象。我不确定问题出在哪里。
我的身份验证中间件:
const jwt = require("jsonwebtoken");
require("dotenv").config();
const auth = async (req, res, next) => {
const token = req.headers["authorization"];
if (!token) {
return res.status(401).send("Access was denied");
} else {
const tokenBody = token && token.split(" ")[1];
jwt.verify(tokenBody, process.env.JWT_SECRET, async (err, decoded) => {
if (err) {
console.log(`JWT error: ${err}`);
return res.status(401).json({ Error: err.message });
} else {
let user = await User.findOne({ email: decoded.email });
res.locals.user = user; //set user object in locals
next();
return user
}
});
}
};
module.exports = auth;
POST 请求:
router.route("/post").post(auth, async (req, res) => {//<- username in middleware
try {
const newReview = new Review({
tagline: req.body.tagline,
bandName: req.body.bandName,
venue: req.body.venue,
showDate: req.body.showDate,
content: req.body.content,
rating: req.body.rating,
username: res.locals.user.username, //send username from locals in the request
});
await newReview.validate();
await newReview.save();
res.json({ message: "New review added"});
} catch (error) {
res.status(500).json(error);
}
});
解决方案
推荐阅读
- embedded - ST-LINK 无法连接到目标
- docker - 在多阶段构建中使用 Docker 内置参数是否安全?
- php - PHP - 反序列化()期间的向后兼容性
- node.js - 使用 axioso 上传的文件在 multer 中显示未定义
- javascript - Ajax 的授权问题
- cypress - Cypress cy.type({enter} 在 for 循环中多次使用时失败
- set - 集合的并集和交集
- amazon-web-services - 在 Redshift 中从多个源加载单个事实表的最佳实践
- python - 如何在船上的图像上计算出鸟眼坐标(自上而下)
- jestjs - 使用isolateModules 模拟本地模块