как получить идентификатор пользователя из токена на предъявителя в авторизации заголовка

#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);
        });
    }
  });
};
 

вместо того, чтобы запрашивать req.params.Идентификатор пользователя спереди в следующей функции, я хочу получить идентификатор пользователя непосредственно из функции ‘me()

 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:

Проблема устранена путем установки идентификатора в теле запроса и передачи функции me в качестве промежуточного программного обеспечения

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