在Firebase存储中访问没有令牌的网址

时间:2017-09-11 10:45:48

标签: firebase firebase-realtime-database firebase-storage

我有一个firebase存储下载网址,比如

https://firebasestorage.googleapis.com/v0/b/siren-5eee7.appspot.com/o/profile%2FC6jNlR0F4cZBPv7wF0REWUNVor33?alt=media&token=63a9130e-2ba6-4f38-ac3f-2231c54a1043

如何在没有令牌参数的情况下访问此网址?

例如,如果我在没有令牌的情况下访问上面的url,则会显示403错误,显示允许拒绝。

我的firebase存储安全规则如下:

service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write: if request.auth != null;
    }
  }
}

此文件位于/etc文件中。我该怎么办?

3 个答案:

答案 0 :(得分:6)

尝试更改规则:

service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read;
      allow write: if request.auth != null;
    }
  }
}

答案 1 :(得分:2)

据我了解,您正在尝试使整个存储桶公开可用。使用Firebase访问规则可能不是最佳方法,您可能想通过Google Cloud的存储层使存储桶读取访问可用。

要做到这一点,最简单的方法之一就是使用Google Cloud Console Storage

选择存储桶,单击该存储桶进行配置,然后打开“权限”选项卡。 由于这是由Firebase托管的存储桶,因此它将具有Google所谓的细粒度访问控制。不用担心,添加公共访问权限非常简单。 单击添加成员按钮,然后在边栏上将allUser添加为新成员,并赋予其“存储”>“存储对象查看器”的角色。您可以在Storage Docs中看到更多详细信息。

这将使存储桶可以通过<bucketname>.storage.googleapis.com公开查看。 如果您在Firebase中创建了与您拥有的域相匹配并在Google Search Console中验证过的额外存储桶,则可以创建一个以您的自定义域命名的存储桶,并使用指向{{ 1}},您可以在Storage Endpoints Docs上看到更多详细信息,Google Cloud的文档对此进行了比我更好的解释。希望这会有所帮助!

答案 2 :(得分:0)

如果您需要不带令牌的allow accessing only the images规则,则必须执行以下操作:

service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read: if request.auth!=null || resource.contentType.matches('image/.*');
      allow write: if request.auth!=null;
    }
  }
}

相关问题