Geo*_*43g 2 firebase firebase-security google-cloud-firestore
Firebase Firestore 阻止客户端在文档中创建字段
根据上面的链接,以前有人问过这个问题,但没有正确回答。
我似乎无法弄清楚如何防止用户将垃圾数据上传到文档中的随机字段名称。尽管对“架构”中的现有字段执行规则很容易,但我还没有发现任何可以阻止用户更新文档的内容
const payload = {
random123: 5,
anotherRandom123: 5
}
Run Code Online (Sandbox Code Playgroud)
我知道可能可以计算字段总数并限制它们,但是,如果文档碰巧没有填充每个字段,您仍然可以写入垃圾数据。您甚至可以使用in运算符和列表函数检查某些字段名称。我可以想象这样做的唯一方法是强制文档始终填充您可能需要的所有字段,强制执行静态字段数,然后检查以确保每个字段名称都存在/正确。
如果文档具有可选字段,这将不起作用。
这可能吗?解决这个问题的最佳方法是什么?
如果要限制可能从客户端应用程序添加到文档的字段名称,则需要检查request.resource.data,它是要写入的文档所有字段的Map。Map 有一个keys 属性方法,它返回一个List所有这些字段名称。您可以使用其hasOnly方法检查 List 是否仅包含您想要的字段名称:
allow write: if request.resource.data.keys().hasOnly(['a', 'b', 'c']);
Run Code Online (Sandbox Code Playgroud)
此规则要求客户端只能对使用命名字段 a、b 和 c 的文档进行修改。
请注意,如果您的后端包含其他键,则此规则对于客户端写入将始终失败,因为 request.resource.data 包含正在写入的最终文档的整个状态,而不仅仅是更改的字段。这是一个更复杂的问题,Stack Overflow 上还有其他答案可以解决这个更具体的问题。
| 归档时间: |
|
| 查看次数: |
296 次 |
| 最近记录: |