Cloud Storage for Firebase SDK 6.1.0:无法使用listAll()

时间:2019-06-02 11:22:04

标签: javascript firebase firebase-storage firebase-security-rules

我正在尝试使用listAll()方法从文件夹中获取所有文件的列表,但无法执行。

这是代码

$(document).ready(function () {
    var storageRef = firebase.storage().ref(userid + "/");

    console.log(storageRef.listAll());

    storageRef.listAll().then(function (result) {

        result.items.forEach(function (imageRef) {
            imageRef.getDownloadURL().then(function (url) {
                $("#album").append("<div class='col-sm-12 col-lg-4'><div class='card'><div class='card-img-top'><img src='" + url + "'></div></div></div>")
            }).catch(function (error) {

            });
        });
    }).
    catch(function (error) {

    });
});

当前Firebase规则:

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

我在控制台内收到此错误Listing objects in a bucket is disallowed for rules_version = "1". Please update storage security rules to rules_verison = "2" to use list.

那么这个错误说明了什么?我需要在Firebase控制台中更改规则版本吗?还是应该制定读写规则以仅允许经过身份验证的用户使用?

1 个答案:

答案 0 :(得分:1)

在安全规则中,您需要声明要使用安全规则版本2。根据documentation

  

自2019年5月起,Firebase安全规则的第2版现已发布   可用。规则的第2版更改了递归行为   通配符{name = **}。如果您打算使用版本2   集合组查询。您必须通过选择加入版本2   rules_version ='2';安全规则的第一行:

rules_version = '2';

因此,您的最低限度规则必须如下所示:

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

请记住,列表文件是最近在JavaScript SDK中发布的,但尚未宣布或未完全记录。