0

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

在前端传递 userID 的问题
任何使用客户端的人都可以使用不同的 s 来操作 Algolia 请求,userID这将过滤与这些 ID 相关的结果。这里有一个安全问题。但是正如 Algolia 在这里提到的,前端搜索速度可以提高 10 倍。

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

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

谢谢。

4

1 回答 1

1

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

您需要使用硬编码的过滤器生成临时 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 -钥匙

于 2022-01-13T15:05:42.217 回答