我正在尝试使用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控制台中更改规则版本吗?还是应该制定读写规则以仅允许经过身份验证的用户使用?
答案 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中发布的,但尚未宣布或未完全记录。