#javascript #object #mongoose
Вопрос:
- ПОЛУЧИТЬ метод
- Использование
accessToken
аутентифицированного пользователя. - Продолжить может только учетная запись, не являющаяся администратором.
- Пользователь должен иметь возможность получать только свои заказы.
Маршрутизатор
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 для поиска пользователя. Я добавил правку, демонстрирующую это.