将租户令牌与官方 SDK 结合使用

    将租户令牌与官方 SDK 结合使用有两个步骤:生成租户令牌,以及使用该令牌发出搜索请求。

    要求

    使用官方 SDK 生成租户令牌

    首先,导入 SDK。然后创建一组搜索规则

    {
      "patient_medical_records": {
        "filter": "user_id = 1"
      }
    }
    

    搜索规则必须是一个对象,其中每个键对应于您实例中的索引。您可以为每个索引配置任意数量的过滤器。

    接下来,找到您的默认搜索 API 密钥。查询获取 API 密钥端点并检查 uid 字段以获取 API 密钥的 UID

    curl \
      -X GET 'https://127.0.0.1:7700/keys/API_KEY' \
      -H 'Authorization: Bearer MASTER_KEY'
    

    为了最大限度地提高安全性,您还应该为租户令牌定义一个到期日期。

    最后,将此数据发送到您选择的 SDK 的租户令牌生成器

    import { generateTenantToken } from 'meilisearch/token'
    
    const searchRules = {
      patient_medical_records: {
        filter: 'user_id = 1'
      }
    }
    const apiKey = 'B5KdX2MY2jV6EXfUs6scSfmC...'
    const apiKeyUid = '85c3c2f9-bdd6-41f1-abd8-11fcf80e0f76'
    const expiresAt = new Date('2025-12-20') // optional
    
    const token = await generateTenantToken({ apiKey, apiKeyUid, searchRules, expiresAt })

    SDK 将返回一个有效的租户令牌。

    使用租户令牌进行搜索请求

    创建令牌后,您必须将其发送到应用程序的前端。具体如何操作取决于您的具体设置。

    一旦租户令牌可用,就可以像使用 API 密钥一样使用它来验证搜索请求。

    const frontEndClient = new MeiliSearch({ host: 'https://127.0.0.1:7700', apiKey: token })
    frontEndClient.index('patient_medical_records').search('blood test')

    应用程序可以在搜索时交替使用租户令牌和 API 密钥。例如,同一个应用程序可能会对公共索引上的查询使用默认的搜索 API 密钥,而对登录用户搜索私有数据时使用租户令牌。