涉及用户 ID 时的 Algolia 后端搜索或前端搜索

Algolia backend search or frontend search when an user ID is involved

我的记录存储在 Algolia 索引中,每个记录都有一个 userID 属性。我想执行搜索,以便过滤用户可见的记录,以便 userIDs 匹配。我可以使用 instantsearch 库和存储在 localStorage 中的 userID 在前端轻松地执行此操作。

在前端传递用户 ID 时出现问题
任何使用客户端的人都可以使用不同的 userID 来操作 Algolia 请求,这些请求将过滤与这些 ID 相关的结果。这里有一个安全问题。但正如 Algolia 提到的那样 here 前端搜索最多可以快 10 倍。

使用后端搜索的解决方案
可以实现这一点,以便使用相关搜索参数和过滤器将普通 HTTP 请求发送到后端,并在后端添加 userID。之后在后端进行搜索并使用 HTTP 响应将数据发送回前端。速度较慢,因为它经过多个服务器只是为了添加 userID.

问题
我想知道是否还有使用前端搜索和保持安全性的解决方法,因为速度也很重要。我刚开始使用 Algolia,但仍然不完全了解它的功能。

谢谢。

有一种内置的方法可以为记录访问控制添加基于用户的安全性。

您需要生成带有硬编码过滤器的临时 API 密钥。最终用户无法更改这些过滤器来绕过安全性。当用户通过您的登录流程时,后端会使用适当的过滤器生成此密钥(例如 'filters' => visible_by:group/'.$currentGroupId.' OR visible_by:group/Everybody' 并将其传递到前端以代替仅搜索 API 密钥。

您的记录需要包含具有适当值的过滤器匹配属性(在本例中为 visible_by)。

您可以在这里阅读更多相关信息:https://www.algolia.com/doc/guides/security/api-keys/how-to/user-restricted-access-to-data/#generating-a-secured-api-key