NativeFirebaseError: [storage/unauthorized] User is not authorized to perform the desired action
NativeFirebaseError: [storage/unauthorized] User is not authorized to perform the desired action
我在将图片上传到 Firebase 存储时遇到问题。我正在使用 React Native 的 @react-native-firebase/storage 并且安装和连接似乎很好,因为我能够很好地引用图像:
const ref = firebase.storage().ref('myImage.png');
问题肯定是基于权限的,因为当我临时删除时:
: if request.auth != null
来自 Firebase 控制台存储规则:
rules_version = '2';
service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
allow read, write: if request.auth != null;
}
}
}
这很好用:
firebase.storage()
.ref('images/test.jpg')
.putFile(myImage[0].path)
.then((successCb) => {
console.log('successCb');
console.log(successCb);
})
.catch((failureCb) => {
console.log('failureCb');
console.log(failureCb);
});
那么如何进行身份验证才能安全地使用 putFile?
编辑:
我正在使用 "@react-native-firebase/storage": "^6.2.0"
提前致谢!
就是这样,弗兰克!
我错误地将应用程序视为已经通过 GoogleService-Info.plist 文件进行身份验证的用户,而不是应用程序的用户需要进行身份验证。
我的修复步骤:
安装@react-native-firebase/auth
进入您的 firebase 控制台的身份验证部分并启用匿名登录方法
在 componentDidMount()
中调用 firebase.auth().signInAnonymously()
并且...终于能够成功将 putFile 提交到存储!
非常感谢@FrankvanPuffelen !!
编辑 Firebase 存储规则以允许上传而无需安装 @react-native-firebase/auth
。
- 导航到 Firebase 控制台
- 在 Sidebar 的 Develop 下打开 Storage
- 打开规则选项卡
- 替换下面的规则
rules_version = '2';
service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
allow read, write
}
}
}
- 并发布
完成
我们可以通过两种方式解决这个问题。要么我们需要在将文件上传到数据库时对用户进行身份验证。或者,如果它仅用于测试目的,我建议转到 firebase 中的存储并单击规则并将“允许读取,写入:如果 request.auth!= null”更改为“允许读取,写入:如果 request.auth == 空”。我建议对用户进行身份验证以获得安全可靠的文件。
希望你的问题得到解决。
我是编码新手,但我遇到了同样的问题。
在我的情况下,它不适用于 Ananymous SignIn。
我必须更改目录位置才能使其正常工作。
原规则:
rules_version = '2';
service firebase.storage {
match /b/{bucket}/o { => Change here
match /{allPaths=**} {
allow read, write: if request.auth != null;
}
}
}
更改为:
rules_version = '2';
service firebase.storage {
match /b/Your_APP_Name.appspot.com/o {
match /{allPaths=**} {
allow read, write: if request.auth != null;
}
}
}
我在将图片上传到 Firebase 存储时遇到问题。我正在使用 React Native 的 @react-native-firebase/storage 并且安装和连接似乎很好,因为我能够很好地引用图像:
const ref = firebase.storage().ref('myImage.png');
问题肯定是基于权限的,因为当我临时删除时:
: if request.auth != null
来自 Firebase 控制台存储规则:
rules_version = '2';
service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
allow read, write: if request.auth != null;
}
}
}
这很好用:
firebase.storage()
.ref('images/test.jpg')
.putFile(myImage[0].path)
.then((successCb) => {
console.log('successCb');
console.log(successCb);
})
.catch((failureCb) => {
console.log('failureCb');
console.log(failureCb);
});
那么如何进行身份验证才能安全地使用 putFile?
编辑: 我正在使用 "@react-native-firebase/storage": "^6.2.0"
提前致谢!
就是这样,弗兰克!
我错误地将应用程序视为已经通过 GoogleService-Info.plist 文件进行身份验证的用户,而不是应用程序的用户需要进行身份验证。
我的修复步骤:
安装@react-native-firebase/auth
进入您的 firebase 控制台的身份验证部分并启用匿名登录方法
在 componentDidMount()
中调用 firebase.auth().signInAnonymously()并且...终于能够成功将 putFile 提交到存储!
非常感谢@FrankvanPuffelen !!
编辑 Firebase 存储规则以允许上传而无需安装 @react-native-firebase/auth
。
- 导航到 Firebase 控制台
- 在 Sidebar 的 Develop 下打开 Storage
- 打开规则选项卡
- 替换下面的规则
rules_version = '2';
service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
allow read, write
}
}
}
- 并发布
完成
我们可以通过两种方式解决这个问题。要么我们需要在将文件上传到数据库时对用户进行身份验证。或者,如果它仅用于测试目的,我建议转到 firebase 中的存储并单击规则并将“允许读取,写入:如果 request.auth!= null”更改为“允许读取,写入:如果 request.auth == 空”。我建议对用户进行身份验证以获得安全可靠的文件。
希望你的问题得到解决。
我是编码新手,但我遇到了同样的问题。 在我的情况下,它不适用于 Ananymous SignIn。 我必须更改目录位置才能使其正常工作。
原规则:
rules_version = '2';
service firebase.storage {
match /b/{bucket}/o { => Change here
match /{allPaths=**} {
allow read, write: if request.auth != null;
}
}
}
更改为:
rules_version = '2';
service firebase.storage {
match /b/Your_APP_Name.appspot.com/o {
match /{allPaths=**} {
allow read, write: if request.auth != null;
}
}
}