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

携带JWT请求Strapi接口时过滤失效,求解决方案

问题描述

我有一个返回产品数据的Strapi端点,遇到了以下问题:

  • 当请求头携带JWT token时,接口的过滤功能失效,会返回所有产品;
  • 移除JWT token后,过滤功能可正常工作。

调用接口的Python函数如下:

def get_products_by_supplier(jwt, supplier_id):
    url = f"{STRAPI_BASE_URL}/products?populate=*&filters[supplier][id][$eq]={supplier_id}"
    if jwt:
        headers = {
            "Authorization": f"Bearer {jwt}",
            "Content-Type": "application/json"
        }
        response = requests.request("GET", url, headers=headers)
        if response.status_code == 200:
            return response.json()
        else:
            return None
    else:
        return None

我需要在请求头中使用JWT token,该如何解决这个问题?

解决方案

1. 检查Strapi角色权限配置

登录Strapi后台,找到JWT对应的用户角色,检查该角色对products内容类型的权限设置:

  • 确认角色的"查看"权限没有设置为查看所有条目,否则权限逻辑会直接覆盖传入的过滤参数;
  • 配置匹配业务需求的权限过滤条件,比如限制角色只能查看关联供应商的产品,确保权限系统不会忽略外部传入的filters参数。

2. 规范传递查询参数

直接拼接URL可能存在编码或解析异常,改用requests的params参数传递查询条件,让请求库自动处理参数编码,避免Strapi解析出错:

def get_products_by_supplier(jwt, supplier_id):
    url = f"{STRAPI_BASE_URL}/products"
    # 用字典统一管理查询参数
    query_params = {
        "populate": "*",
        "filters[supplier][id][$eq]": supplier_id
    }
    if jwt:
        headers = {
            "Authorization": f"Bearer {jwt}",
            "Content-Type": "application/json"
        }
        response = requests.get(url, headers=headers, params=query_params)
        return response.json() if response.status_code == 200 else None
    else:
        return None

3. 排查自定义权限逻辑

如果项目中存在自定义的生命周期钩子、路由中间件或权限策略,检查这些逻辑是否在携带JWT时修改了查询语句,导致传入的过滤参数被覆盖。比如某些自定义逻辑会强制添加用户关联的供应商条件,可能与外部传入的supplier_id冲突。

4. 开启Strapi查询日志调试

在Strapi的config/server.js中启用调试日志,对比带JWT和不带JWT时生成的SQL查询语句,定位问题根源:

// config/server.js
module.exports = {
  host: process.env.HOST || '0.0.0.0',
  port: process.env.PORT || 1337,
  logger: {
    level: 'debug', // 开启调试级别日志
    format: 'combined',
  },
};

启动Strapi后,观察控制台输出的数据库查询语句,确认两种请求下的SQL是否一致,判断是否是权限系统修改了查询条件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 16:02:53