Firebase 存储安全规则 400 错误问题 "Permission denied. Could not access bucket xxxxx-****.appspot.com"

Firebase storage security rules 400 error issue "Permission denied. Could not access bucket xxxxx-****.appspot.com"

我不断收到来自 firebase 的消息错误 link 在尝试上传照片时,在我的 React 项目中我的 firebase 存储上传出现 400 错误...之前一切正常并成功上传图像,但现在它停止上传照片出现以下错误,我不知道问题出在哪里...

检查中提示的link

POST https://firebasestorage.googleapis.com/v0/b/xxxxx-****.appspot.com/o?name=usertemp%2F0rdrGK4MRDRptAMCc3mHDveytJv1%2F0rdrGK4MRDRptAMCc3mHDveytJv1.jpg 400 ()

这是来自 link 响应的错误

{
  "error": {
    "code": 400,
    "message": "Permission denied. Could not access bucket xxxxx-****.appspot.com. Please enable Firebase Storage for your bucket by visiting the Storage tab in the Firebase Console and ensure that you have sufficient permission to properly provision resources."
  }

这是我的保安

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

我仍然尝试将 match 更改为 /b/xxxxx-****.appspot.com/o 但仍然没有成功

这是由于缺少权限。你需要检查你是否有

firebase-storage@system.gserviceaccount.com

作为具有 "Storage Admin" 角色的成员。如果您没有,请添加它。这将解决问题。

这是有关如何检查和添加权限的步骤。

  • 前往 Cloud console
  • 导航到存储
  • Select 您的存储桶,然后单击显示信息面板。

如果需要,您也可以在 IAM 和管理中添加缺少的权限。

我注意到这个问题发生在没有在 Google App Engine 仪表板上启用 Firebase* API 和服务的项目上(见下面的屏幕截图)。所以我手动启用了与 firebase 存储相关的 API。

我不明白为什么某些 API 和服务会自动为某些项目启用,而对其他项目却不启用。 Firebase - GCP integration steps 上似乎没有关于需要显式 启用 firebase API 的具体说明。

另一个 有助于阐明这种明显的不一致

我遇到了同样的问题。问题是,我在初始化存储之前托管了我的页面,所以当我初始化它时,存储桶不匹配。我所要做的就是在 firebase 上生成另一个 google-services.json 文件,下载它,将它添加到我的项目文件中,然后再次部署它。那解决了我的问题。

当您尝试在创建特定于文件上传的 Firebase 存储 之前上传图片时,会发生此错误。

Could not access bucket xxxxx-****.appspot.com. Please enable Firebase Storage for your bucket by visiting the Storage tab in the Firebase Console and ensure that you have sufficient permission to properly provision resources

这就是您遇到消息 Please Enable Firebase Storage for your bucket 错误的原因,因为 Firebase 存储充当存储桶媒体上传的默认位置。

{
  "error": {
    "code": 400,
    "message": "Permission denied. Could not access bucket xxxxx-****.appspot.com. Please enable Firebase Storage for your bucket by visiting the Storage tab in the Firebase Console and ensure that you have sufficient permission to properly provision resources."
  }

怎么办?

只需转到您的项目 Firebase 控制台 >> 存储 >> 并单击 开始使用

我遇到了同样的问题。解决方案包括单击“存储”标签(firebase 控制台左侧),然后单击“确定”按钮以启用上传规则。

以防上述解决方案不起作用。检查给定的 StorageInstanceURL 是否正确。

如果您在遵循本页上的无数解决方案后遇到此问题,并且如果您最近将您的 firebase 项目降级为免费版本,则可能需要确保您使用的是正确的存储桶。

对我来说,我通过 google 云控制台在存储中创建了一个存储桶。后来,我创建了一个 firebase 项目来使用我的 unity 应用程序中的存储。我将这个新存储桶添加到我的存储中,所以现在我有一个由 firebase 提供的默认存储桶和我之前创建的存储桶。我通过我的应用上传文件没问题。

但是,我随后更改为免费版的 firebase,以避免产生任何未预料到的账单。这样做的意外后果是每个 firebase 项目只能使用一个桶,并且不允许使用额外的桶。

因此,请检查您尝试写入的是 firebase 提供的默认存储桶实例,而不是您创建的自定义存储桶。它仍然会说权限被拒绝,它仍然会告诉你确保你启用了存储,即使你这样做了。事实上,如果您使用的是免费版的 firebase,则需要使用默认存储桶。

tldr:如果您使用的是免费版的 firebase,则不能使用自定义存储桶,必须使用 firebase 创建的默认存储桶。

在我的例子中,缺少 firebase-adminsdk 权限。我按照接受的答案将 firebase-adminsdk-xxxx@xxxxx.iam.gserviceaccount.com 添加到存储管理员角色,如下所示:

转到https://console.cloud.google.com/home/dashboard?project=your-project-name

导航到存储 Select 您的存储桶,然后单击显示信息面板。

单击 Add 并键入 firebase-adminsdk-、select 自动填充选项

单击 select role > cloud storage > storage admin 并保存。

obs:无法对已接受的答案发表评论,因为我没有足够的代表。

我已经通过转到 Storage > Rules 并将 read,write 设置为 true 来解决此问题:

来自这里:

rules_version = '2';
service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write: if false; //set this to true
    }
  }
}

改成这样:

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

如果它不起作用,进行一些故障排除可能会有所帮助;单击 Upload File 按钮尝试将 image/file 上传到您的存储空间。并尝试 re-uploading 来自 script/code 的文件,看看它是否有效。然后删除您上传的示例文件。确保 allow read, write:true : allow read, write: if true;

注意:这仅用于测试开发,稍后在生产中更改规则。

我遇到了类似的问题:Permission denied. Please enable Firebase Storage for your bucket by visiting the Storage tab in the Firebase Console and ensure that you have sufficient permission to properly provision resources.

我不明白它为什么会出现,因为我是创建此项目的用户。因此,我拥有所有者权限。

这是我上传到存储桶中的第一张图片。 5 分钟后它起作用了(我什么也没改变)。