首页 > 解决方案 > 无法从经过身份验证的 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);
  }
});

标签: node.jsexpressauthenticationmiddleware

解决方案


推荐阅读