Firebase 上传保护

Firebase upload protection

我正在构建一个用户可以上传图片的应用程序。我使用 firebase 作为后端。现在既然所有登录的用户都可以上传,我该如何安全地管理它呢? 图片通过 firebase 存储上传,然后 URL 保存到 Firestore。 我有两个选择:

我确实使用 firebase 云函数,但如果我先添加文档,则会调用云函数,而图片可能无法完成上传。解决此问题的最佳方法是什么?

如果您认为可以添加到批处理操作、Firestore 添加操作和 Firebase 存储文件上传操作,并确保两者都是完整的,这样您就可以获得一致的数据,请注意,这是不可能的.这些操作是不同 Firebase 服务的一部分,不幸的是,目前我正在写这个答案,你无法使它们成为原子操作。

据我所知,none 的 Firebase 产品支持跨产品事务操作。要解决此问题,您必须在 addition/upload 操作期间嵌套调用,并在第二次操作失败时处理错误。这意味着如果 Cloud Storage 中的上传操作失败,您必须从 Firestore 中删除文档,反之亦然。

但是请注意,在某个时间点,会出现客户端无法回滚其中一个删除操作的故障。对于可能发生的这些不可避免的故障,最常见的方法是通过处理异常和在 Firestore 和 Firebase 存储这两个地方执行偶尔的清理来使您的代码健壮。

您可以设置一个用户身份验证声明,例如“can_upload_pics”,然后在用户启动上传时检查此声明,您可能希望使用 firebase 函数来添加自定义声明。如果做得对,第二个选项将按预期工作 查看此视频以获得 custom claims

的良好解释和示例