不使用 Meilisearch SDK 生成租户令牌

    本指南向您展示了在使用第三方库 node-jsonwebtoken 创建租户令牌时的主要步骤。

    要求

    使用 jsonwebtoken 生成租户令牌

    构建租户令牌有效负载

    首先,创建一组搜索规则

    {
      "INDEX_NAME": {
        "filter": "ATTRIBUTE = VALUE"
      }
    }
    

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

    curl \
      -X GET 'MEILISEARCH_URL/keys/API_KEY' \
      -H 'Authorization: Bearer MASTER_KEY'
    

    为了最大限度地提高安全性,您还应该为您的租户令牌设置过期日期。 以下示例配置令牌在创建后 20 分钟过期

    parseInt(Date.now() / 1000) + 20 * 60
    

    创建租户令牌

    首先,在您的应用程序中包含 jsonwebtoken。 接下来,组装令牌有效负载并将其传递给 jsonwebtokensign 方法

    const jwt = require('jsonwebtoken');
    
    const apiKey = 'API_KEY';
    const apiKeyUid = 'API_KEY_UID';
    const currentUserID = 'USER_ID';
    const expiryDate = parseInt(Date.now() / 1000) + 20 * 60; // 20 minutes
    
    const tokenPayload = {
      searchRules: {
        'INDEX_NAME': {
          'filter': `user_id = ${currentUserID}`
         }
      },
      apiKeyUid: apiKeyUid,
      exp: expiryDate
    };
    
    const token = jwt.sign(tokenPayload, apiKey, {algorithm: 'HS256'});
    

    sign 需要有效负载、Meilisearch API 密钥和加密算法。 Meilisearch 支持以下加密算法:HS256HS384HS512

    您的租户令牌现在可以使用了。

    使用其他库

    虽然此示例使用了 Node.js 包 jsonwebtoken,但您可以使用任何您觉得舒服的语言中的任何 JWT 兼容库。

    使用租户令牌发出搜索请求

    签署令牌后,您可以使用它发出搜索查询,就像您使用 API 密钥一样。

    curl \
      -X POST 'MEILISEARCH_URL/indexes/patient_medical_records/search' \
      -H 'Authorization: Bearer TENANT_TOKEN'