无法在 Flutter 中访问 Firebase 存储
Can't access to Firebase Storage in Flutter
我想访问我的 firebase 存储中的一个文件夹,所以我正在使用这个 flutter 代码来做到这一点
`
var storageRef =
firebase_storage.FirebaseStorage.instance.ref('test');
storageRef.listAll().then((value) {
value.items.forEach((element) {
print(element.getDownloadURL().toString());`
});`
});`
并且我通过此代码将所有文件和文件夹设为公开
allow read, write : if true ;
但我在我的终端中收到这条消息
W/StorageUtil(28332):请求没有授权令牌
我认为我似乎必须对我的用户进行身份验证,但在我的用例中我不必这样做
此外,通过公开设置我的文件和文件夹,我不需要对我的用户进行身份验证
我的代码或逻辑有什么问题?
消息“W/NetworkRequest:请求没有授权令牌”是调试此问题的关键。
此日志消息表示 Firebase 存储在当前上下文中未看到 任何 登录。这包括匿名登录。这意味着没有授权被传递到后端,唯一允许的方法是将规则设置为完全开放(public 访问),这是不推荐的(见下文)。
//this sets completely open access to your data
allow read, write;
我会检查您的登录代码并确保它在任何存储操作完成之前成功完成。
如果您确定您的授权代码是正确的,请尝试 resetting data on the device 这样就没有保存的状态可能会弄乱应用程序的授权信息。
您可能需要检查您在 firebase 控制台中的存储规则。默认情况下,它被设置为只允许经过身份验证的用户,就像这样
allow read, write: if request.auth != null;
我找到了解决我的问题的方法,首先我在终端 'W/StorageUtil(28332): no auth token for request' 中收到的消息不是错误而是调试消息,所以我犯的错误是我打印 getDownloadURL() 时没有await 语句所以我将 forEach 循环中的代码更改为那样
var x = await element.getDownloadURL(); print(x);
我想访问我的 firebase 存储中的一个文件夹,所以我正在使用这个 flutter 代码来做到这一点
`
var storageRef =
firebase_storage.FirebaseStorage.instance.ref('test');
storageRef.listAll().then((value) {
value.items.forEach((element) {
print(element.getDownloadURL().toString());`
});`
});`
并且我通过此代码将所有文件和文件夹设为公开
allow read, write : if true ;
但我在我的终端中收到这条消息
W/StorageUtil(28332):请求没有授权令牌
我认为我似乎必须对我的用户进行身份验证,但在我的用例中我不必这样做
此外,通过公开设置我的文件和文件夹,我不需要对我的用户进行身份验证
我的代码或逻辑有什么问题?
消息“W/NetworkRequest:请求没有授权令牌”是调试此问题的关键。
此日志消息表示 Firebase 存储在当前上下文中未看到 任何 登录。这包括匿名登录。这意味着没有授权被传递到后端,唯一允许的方法是将规则设置为完全开放(public 访问),这是不推荐的(见下文)。
//this sets completely open access to your data
allow read, write;
我会检查您的登录代码并确保它在任何存储操作完成之前成功完成。 如果您确定您的授权代码是正确的,请尝试 resetting data on the device 这样就没有保存的状态可能会弄乱应用程序的授权信息。
您可能需要检查您在 firebase 控制台中的存储规则。默认情况下,它被设置为只允许经过身份验证的用户,就像这样
allow read, write: if request.auth != null;
我找到了解决我的问题的方法,首先我在终端 'W/StorageUtil(28332): no auth token for request' 中收到的消息不是错误而是调试消息,所以我犯的错误是我打印 getDownloadURL() 时没有await 语句所以我将 forEach 循环中的代码更改为那样
var x = await element.getDownloadURL(); print(x);