【问题标题】:How to observe Firebase Storage object's downloadUrl change?如何观察 Firebase 存储对象的 downloadUrl 变化?
【发布时间】:2020-04-07 15:38:22
【问题描述】:

假设我们将用户的照片存储在 Storage 中,并且在用户的“photoURL”中存储该图像的 downloadUrl。

之后,假设照片的 downloadUrl 以某种方式被应用管理员或其他原因撤销。

现在,用户的 photoURL 不见了。

有没有办法观察存储项的dowloadUrl变化?我还找不到。如果没有;这里有两个想法;我应该去哪一个?

第二种方式:

存储存储位置而不是 downloadURL 并且每次都请求 dowloadUrl,我不想这样做,因为它总共需要 3 个请求,而不是 2 个。对于类似社交媒体的应用程序来说,这应该太多了。此外,如果用户通过 Facebook、Twitter 等进行身份验证,他们的照片将由这些提供商提供,我需要检查每个 url 是“存储位置”还是直接 url。

第三种方式:

使用 gravatar 或类似的东西。

【问题讨论】:

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


    【解决方案1】:

    虽然有可能,但撤销下载 URL 并不常见。更常见的情况是,在存储中的相同路径上上传了新图像,该图像获得了新的下载 URL。 Firebase Storage API 中没有内置 API 可以观察这些变化。

    常见的方法是将下载 URL 存储到另一个 可观察的位置,并在图像更改时更新它(连同有关图像的其他元数据)。通常,您会为此使用 Firebase 实时数据库或 Cloud Firestore。在那里,您将下载 URL 存储为它所属的节点/文档的属性/字段。然后通过使用实时观察器,您可以检测到下载 URL 的更改。

    【讨论】:

    • 是的,这种方法类似于我为我的帖子所做的。我持有 dowloadURL 以及 Firestore 中的存储位置(以及我需要的元数据)。首先,我使用 downloadURL 来获取图像,如果失败,我会从存储位置请求新的 downloadURL 并更新旧的 downloadURL。但我不能为用户 photoURL 这样做,因为它不是映射或数组的地方
    • 我想到的另一种方法是直接请求数据,而不是请求downloadURL。但我不知道它是否会影响性能等。
    • 如果您将下载 URL 存储在数据库中,您应该在下载 URL 得到更新时更新该数据,因此从上传新图像的代码中,或者当您撤销现有的下载 URL 时。
    • 我正在处理我可以通过云函数中的触发器捕获的所有可能的操作。但以防万一仍然持有存储位置。这也是我的问题。您说或当您撤销现有下载 URL 时,看起来撤销无法被任何触发器捕获。
    • 没错。由于令牌撤销不会影响存储的对象,因此没有触发器。如果您以编程方式撤销令牌,则可以在撤销调用返回后触发 HTTPS 函数。
    猜你喜欢
    • 2018-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-06
    • 2017-09-07
    • 2018-07-31
    相关资源
    最近更新 更多