保护和过滤 FireStore 文档中的某些数据 "Keys"

Secure and Filter certain data "Keys" inside the FireStore document

我正在开发一个应用程序,它需要搜索所有附近的用户,而不是在 100 英里以内共享他们的坐标。下面的示例我使用 GeoHash 来帮助我计算距离。

在 FireStore 中,我在用户集合中有以下文档。

{
   "userId" : "12345",
   "displayName" : "username",
   "geoHash" : "gbsuv",
   "photoUrl" : "example.com/user.jpg",
   "refId" : "0001"
}

问题是:我应该如何防止 "geoHash" 在集合中的每个文档中被检索到?

Firestore 安全规则授予文档级别的访问权限。因此,用户要么可以阅读整个文档,要么他们无法阅读该文档中的任何内容。无法仅授予用户对文档的一部分的访问权限。

这意味着您不能查询客户端无法读取的内容。因此,在您当前的结构中,如果用户需要查询 geoHash,他们也将能够读取该字段。

唯一的选择是不让客户端进行查询,而是在服务器上进行查询(例如在 Cloud Functions 中)。为此,您会将每个用户的 geohash 存储在单独的文档中(比如在名为 locations 的集合中)。 Cloud Function 然后查询此集合,并向用户 returns 真实用户文档(不再包含 geohash)。