【问题标题】:How can I upload files to Cloud Storage through Cloud Functions and use Firestore to control access to Cloud Storage?如何通过 Cloud Functions 将文件上传到 Cloud Storage 并使用 Firestore 控制对 Cloud Storage 的访问?
【发布时间】:2021-04-07 12:15:27
【问题描述】:

我正在尝试实现一个系统,该系统允许 react-native 客户端将文件上传到 Cloud Storage 中的特定文件夹并允许客户端从中下载。我不能直接从客户端执行此操作,因为我首先需要查询 Firestore 以验证用户是否是文件夹所有者的“朋友”,这将允许读/写权限。

我决定使用 Cloud Functions 作为中间层来封装这个业务逻辑,我希望也能够使用它作为中间层来上传文件。但是,我觉得我可能误解了如何最好地结合使用这些服务来解决这个问题。

当前计划:

  1. 客户端将文件上传到 Cloud Function(假设在 Cloud Function 查询 Firestore 并验证后允许上传文件)
  2. Cloud Function 将文件上传到 Cloud Storage
  3. 然后客户端可以从 Cloud Function 请求文件,该函数使用 Firestore 验证权限并从 CloudStorage 下载文件
  4. 云函数向客户端发送文件

问题:

  • 我可以/应该以这种方式使用 Cloud Functions 作为中间层在 Firestore 中验证权限存储后上传文件吗?
  • 是否有使用 Firebase 的替代解决方案可以减轻 Cloud Functions 的 10MB 下载限制,但仍允许我使用我在 Firestore 中关系的自定义业务逻辑对上传/下载到 Cloud Storage 进行身份验证?

感谢您提供任何帮助或指导!我对 Firebase、云架构和一般架构非常陌生。

【问题讨论】:

    标签: firebase google-cloud-firestore google-cloud-functions firebase-storage


    【解决方案1】:

    这绝对是一种有效且技术上可行的方法。你是否应该这样做,当然只有你自己可以决定。

    另一种方法是使用 Firebase 存储的安全规则对文件实施访问控制。但是您将无法在这些规则中从 Firestore 读取任何内容,因此您必须确保授予/拒绝访问所需的所有内容都位于请求文件的路径、文件的元数据和/或用户的令牌。

    即使您在 Cloud Functions 中实现文件下载,您仍然可以通过 Firebase 执行上传。例如,在这种情况下,您可以让用户写入一个临时位置,然后触发一个云函数,该函数可以对文件进行任何您想要的额外检查。

    【讨论】:

    • 感谢您的回复!很高兴听到我的方法并没有完全关闭!我对这种方法的一个担忧是,它实际上使给定文件的下载/上传次数增加了一倍,我认为这将导致通过 Cloud Function 从云存储上传和下载的延迟更长。这种方法只是预期的吗?还是有一些我不知道的解决方案?
    • 还会有一次往返,但很难衡量其影响。我建议测量客户端上的时间差异。我期望绝大多数人将字节发送到用户的手机,而不是在相关服务器甚至数据中心之间穿梭。但再说一遍:我建议您对它进行端到端测量以确定。
    猜你喜欢
    • 2019-04-08
    • 1970-01-01
    • 2020-05-18
    • 2018-08-02
    • 1970-01-01
    • 2015-08-28
    • 1970-01-01
    • 1970-01-01
    • 2019-09-27
    相关资源
    最近更新 更多