firebase - 保护和过滤 FireStore 文档中的某些数据“密钥”
问题描述
我正在开发一个应用程序,它需要搜索所有附近的用户而不共享他们在 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 然后查询此集合,并将真实的用户文档(不再包含 geohash)返回给用户。
推荐阅读
- javascript - 使用 vanilla JS 且没有包管理器的 vscode chrome 调试 - 未绑定断点
- r - 如何删除向量的每个第三个元素?
- excel - 在 DataPresenterExcelExporter.Export 期间打击 Excel 公式注入
- gitlab - 美人鱼类图只会变宽,忽略方向
- function - 如何在pyret中编写递归乘法函数
- c++ - 为什么输入验证会返回部分输入而不是将整个输入声明为错误
- xml - XML 模式 - 名称空间选择歧义
- c# - 从 D365 dataverse JSON 中检索值的最简单方法?
- java - AuthenticationManager 的扩展点
- flutter - Flutter:获取过去在 Android 上的购买记录