Firebase 上传保护
Firebase upload protection
我正在构建一个用户可以上传图片的应用程序。我使用 firebase 作为后端。现在既然所有登录的用户都可以上传,我该如何安全地管理它呢?
图片通过 firebase 存储上传,然后 URL 保存到 Firestore。
我有两个选择:
- 一个 URL 添加到 Firestore,然后可以上传图像。
这样做的好处是,在添加新的 Firestore 文档后,我可以授予用户上传文件的权限。缺点是添加文档后上传可能会失败。这意味着 Firestore 中有一个 URL 而 Storage 中没有图像。
- 图像上传到存储,然后添加 Firestore 文档。
这样做的好处是每个文档都附有图片,但这也意味着每个用户都可以上传他们想要的每张图片,而我无法控制。
我确实使用 firebase 云函数,但如果我先添加文档,则会调用云函数,而图片可能无法完成上传。解决此问题的最佳方法是什么?
如果您认为可以添加到批处理操作、Firestore 添加操作和 Firebase 存储文件上传操作,并确保两者都是完整的,这样您就可以获得一致的数据,请注意,这是不可能的.这些操作是不同 Firebase 服务的一部分,不幸的是,目前我正在写这个答案,你无法使它们成为原子操作。
据我所知,none 的 Firebase 产品支持跨产品事务操作。要解决此问题,您必须在 addition/upload 操作期间嵌套调用,并在第二次操作失败时处理错误。这意味着如果 Cloud Storage 中的上传操作失败,您必须从 Firestore 中删除文档,反之亦然。
但是请注意,在某个时间点,会出现客户端无法回滚其中一个删除操作的故障。对于可能发生的这些不可避免的故障,最常见的方法是通过处理异常和在 Firestore 和 Firebase 存储这两个地方执行偶尔的清理来使您的代码健壮。
您可以设置一个用户身份验证声明,例如“can_upload_pics”,然后在用户启动上传时检查此声明,您可能希望使用 firebase 函数来添加自定义声明。如果做得对,第二个选项将按预期工作
查看此视频以获得 custom claims
的良好解释和示例
我正在构建一个用户可以上传图片的应用程序。我使用 firebase 作为后端。现在既然所有登录的用户都可以上传,我该如何安全地管理它呢? 图片通过 firebase 存储上传,然后 URL 保存到 Firestore。 我有两个选择:
- 一个 URL 添加到 Firestore,然后可以上传图像。 这样做的好处是,在添加新的 Firestore 文档后,我可以授予用户上传文件的权限。缺点是添加文档后上传可能会失败。这意味着 Firestore 中有一个 URL 而 Storage 中没有图像。
- 图像上传到存储,然后添加 Firestore 文档。 这样做的好处是每个文档都附有图片,但这也意味着每个用户都可以上传他们想要的每张图片,而我无法控制。
我确实使用 firebase 云函数,但如果我先添加文档,则会调用云函数,而图片可能无法完成上传。解决此问题的最佳方法是什么?
如果您认为可以添加到批处理操作、Firestore 添加操作和 Firebase 存储文件上传操作,并确保两者都是完整的,这样您就可以获得一致的数据,请注意,这是不可能的.这些操作是不同 Firebase 服务的一部分,不幸的是,目前我正在写这个答案,你无法使它们成为原子操作。
据我所知,none 的 Firebase 产品支持跨产品事务操作。要解决此问题,您必须在 addition/upload 操作期间嵌套调用,并在第二次操作失败时处理错误。这意味着如果 Cloud Storage 中的上传操作失败,您必须从 Firestore 中删除文档,反之亦然。
但是请注意,在某个时间点,会出现客户端无法回滚其中一个删除操作的故障。对于可能发生的这些不可避免的故障,最常见的方法是通过处理异常和在 Firestore 和 Firebase 存储这两个地方执行偶尔的清理来使您的代码健壮。
您可以设置一个用户身份验证声明,例如“can_upload_pics”,然后在用户启动上传时检查此声明,您可能希望使用 firebase 函数来添加自定义声明。如果做得对,第二个选项将按预期工作 查看此视频以获得 custom claims
的良好解释和示例