You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改代码实现认证用户仅能查询自身订单的功能

问题原因

  • 路由层没有将token解析得到的用户唯一标识传给Controller层,仅传递了无用户信息的req.body
  • Controller层User.find的查询条件为空对象{},会匹配所有用户数据,自然返回全部内容

修改方案

1. 修改Router代码

将token解析得到的用户唯一标识(根据你token内存储的字段调整,示例假设为userId)传给Controller,移除不合理的req.body传参(GET请求不建议使用body传参,多数服务端会直接丢弃GET请求的body内容):

router.get("/my-orders", auth.verify, (req, res) => {
    const user = auth.decode(req.headers.authorization);
    if (!user.isAdmin) {
        // 传入当前用户的唯一标识
        UserController.getMyOrders(user.userId).then(getMine => res.send(getMine));
    } else {
        return res.status(403).send("Access denied.");
    }
});

2. 修改Controller代码

给User.find添加查询过滤条件,仅匹配当前用户的数据:

module.exports.getMyOrders = (userId) => {
    // 第一个参数新增用户过滤条件,注:如果你的用户表唯一标识字段为_id,替换为{ _id: userId }即可
    return User.find({ userId: userId }, {
        "isAdmin": 0,
        "_id": 0,
        "password": 0
    });
}

可选优化

如果你的订单是单独存储在Order集合中,更合理的写法是直接查询订单集合,避免查询整个用户表:

module.exports.getMyOrders = (userId) => {
    // 直接查询订单集合,返回对应用户的所有订单
    return Order.find({ userId: userId });
}

内容的提问来源于stack exchange,提问作者jclarete

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 12:24:08