【问题标题】:using google firebase storage without authentication使用未经身份验证的谷歌 Firebase 存储
【发布时间】:2016-05-25 07:08:21
【问题描述】:

我想与所有没有服务器的用户共享一些 json 文件,并且我使用 google firebase 存储服务(没有用户身份验证)。 代码:

FirebaseStorage storage = FirebaseStorage.getInstance();
StorageReference storageRef = storage.getReferenceFromUrl("gs://xxxxxx.appspot.com/xxx-main.json");
Task<byte[]> task = storageRef.getBytes(1000000);
while (!task.isComplete())
    StaticTools.sleep(100);

byte[] b=task.getResult();

但它引发了一个异常:

com.google.android.gms.tasks.RuntimeExecutionException: com.google.firebase.storage.StorageException: User does not have permission to access this object.

存储规则:

service firebase.storage {
  match /b/XXXXXX.appspot.com/o {
    match /{allPaths=**} {
      allow read, write;
    }
  }
}

【问题讨论】:

    标签: android firebase firebase-cloud-messaging


    【解决方案1】:

    https://console.firebase.google.com 使用新的 Firebase 存储控制台。浏览您的文件夹并选择您上传的文件。在文件位置选项卡下,有一个名为 下载 URL 的字段。单击它进行复制,您将能够在您的网站中热链接到该文件。

    只要规则选项卡中没有写入权限设置,您应该可以公开使用这些文件。

    【讨论】:

    • 可下载的网址不符合安全规则。任何有 url 的人都可以使用它们
    【解决方案2】:

    Xavier 对下载 URL 的回答将起作用。

    您的规则应该允许公开阅读,但您的规则最多可能需要 5 分钟才能在整个系统中更新。

    【讨论】:

    • 下载地址的有效期是多久?
    • 它们在被撤销之前都是有效的,这可以通过对象更新或通过在 firebase Web 控制台中显式撤销 url 来实现。
    • 规则不适用于可下载的网址
    【解决方案3】:

    我将它用于它工作的最新 Firebase

    service firebase.storage {
      match /b/{bucket}/o {
        match /{allPaths=**} {
          allow read, write;
        }
      }
    }
    

    我只是在 if 条件下删除。

    【讨论】:

      【解决方案4】:

      看起来 Google Firebase 存储仅适用于经过身份验证的用户。如果您的应用不需要用户身份验证,您可以设置匿名身份验证。

      【讨论】:

        猜你喜欢
        • 2018-01-01
        • 1970-01-01
        • 2023-03-10
        • 1970-01-01
        • 2018-04-30
        • 2023-03-14
        • 1970-01-01
        • 2021-12-20
        • 2021-10-29
        相关资源
        最近更新 更多