Получение Аутентифицированных заказов Пользователя

#javascript #object #mongoose

Вопрос:

  1. ПОЛУЧИТЬ метод
  2. Использование accessToken аутентифицированного пользователя.
  3. Продолжить может только учетная запись, не являющаяся администратором.
  4. Пользователь должен иметь возможность получать только свои заказы.

Маршрутизатор

 router.get("/my-orders", auth.verify, (req, res) => {

    const user = auth.decode(req.headers.authorization);

    if (!user.isAdmin) {

        UserController.getMyOrders(req.body).then(getMine => res.send(getMine));


    } else {

        return res.status(403).send("Access denied.");
    }

});```

 

Контроллер

 module.exports.getMyOrders = (body) => {

    return User.find({}, {
        "isAdmin": 0,
        "_id": 0,
        "password": 0
    });
}
 

Я получаю все. Может ли кто-нибудь помочь мне с кодом, как отфильтровать пользователя, которому принадлежит токен, и получить его заказы, не имея возможности получать заказы других пользователей?

Ответ №1:

Передавая пустой объект в своем .find методе, вы говорите mongodb, чтобы он искал все. Я предполагаю, что у body вас есть какие-то данные, чтобы найти конкретного пользователя, если бы вы использовали их. например. если body содержит имя пользователя, вы бы написали…

 module.exports.getMyOrders = (body) => {
    return User.find({username: body.username});
}
 

Вот еще немного информации о db.collection.find()

РЕДАКТИРОВАТЬ — Поиск пользователя по JWT:

 router.get("/my-orders", auth.verify, (req, res) => {
    //Here you have decoded your JWT and saved it as user
    const user = auth.decode(req.headers.authorization);

    if (!user.isAdmin) {
        //here you are passing user instead of req.body
        UserController.getMyOrders(user).then(getMine => res.send(getMine));


    } else {

        return res.status(403).send("Access denied.");
    }

});
 

 module.exports.getMyOrders = (user) => {
    //now you are using 'username' from the decoded jwt to look up the user
    return User.find({username: user.username});
}
 

Комментарии:

1. Как я могу объявить, что заказы принадлежат JWT?

2. Похоже, что вы сохраняете декодированный JWT в user переменной, поэтому вам нужно будет перейти user к своей getMyOrders функции, а затем использовать информацию из вашего декодированного JWT для поиска пользователя. Я добавил правку, демонстрирующую это.