如何从标头授权中的不记名令牌中获取用户 ID

时间:2021-03-08 21:02:51

标签: javascript node.js express

我有一个异步函数,它接受从 headers.authorization 发送的不记名令牌并返回当前连接的用户信息。

exports.me = async (req, res) => {
  const accessToken = req.headers.authorization;

  const bearer = accessToken.split(" ");
  const bearerToken = bearer[1];
  req.token = bearerToken;
  // header take

  jwt.verify(bearerToken, process.env.SECRET_KEY, function (err, decoded) {
    if (decoded) {
      const now = new Date();
      User.findOne({ _id: decoded.id })
        .select("firstName  lastName email avatar birthday _id") 
        .then((user) => {
          return res.status(200).json(user);
        })
        .catch((err) => {
          return res.status(404).json(err);
        });
    }
  });
};

我想直接从'me()'函数中获取userId,而不是从下一个函数的前面请求req.params.userId >

exports.getEvents = async (req, res) => {

  const allEvents = await Events.find({ owner: req.params.userId })
    .then((events) => {
      return res.status(200).json(events);
    })
    .catch((err) => {
      return res.status(404).json(err);
    });
};

1 个答案:

答案 0 :(得分:0)

通过在 req.body 中设置 id 并将 me 函数作为中间件传递来解决问题

User.findOne({ _id: decoded.id })
          .select("firstName  lastName email avatar birthday _id") 
          .then((user) => {
            req.body.userId = user._id
            next();
        })