使用官方 SDK 中的租户令牌
使用官方 SDK 的租户令牌分两步:生成租户令牌,然后使用该令牌发送搜索请求。
要求
- 一个有效的 Meilisearch 项目
- 一个支持经过身份认证的用户
- 安装了 Meilisearch 的一个官方 SDK
使用官方 SDK 生成租户令牌
首先,导入 SDK。然后创建一组搜索规则
{
"patient_medical_records": {
"filter": "user_id = 1"
}
}
搜索规则必须是一个对象,其中每个键对应一个实例中的索引。您可以为每个索引配置任意数量的过滤器。
接下来,查找您的默认搜索 API 密钥。查询获取 API 密钥端点并检查uid
字段以获取 API 密钥的 UID
curl \
-X GET 'http://localhost:7700/keys/API_KEY' \
-H 'Authorization: Bearer MASTER_KEY'
为了最大程度地提高安全性,您还应该为租户令牌定义一个到期日期。
最后,将此数据发送到您所选择的 SDK 的租户令牌生成器
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 client.generateTenantToken(apiKeyUid, searchRules, {
apiKey: apiKey,
expiresAt: expiresAt,
})
SDK 将返回一个有效的租户令牌。
使用租户令牌进行搜索请求
创建令牌后,您必须将其发送到应用程序的前端。具体如何操作取决于您的特定设置。
一旦获得了租户令牌,就使用它对搜索请求进行身份验证,就像它是一个 API 密钥一样
const frontEndClient = new MeiliSearch({ host: 'http://localhost:7700', apiKey: token })
frontEndClient.index('patient_medical_records').search('blood test')
应用程序在搜索时可以互换地使用租户令牌和 API 密钥。例如,同一个应用程序可以使用默认搜索 API 密钥对公共索引进行查询,并使用租户令牌对在私有数据上进行搜索的已登录用户进行查询。