【问题标题】:How to deploy Firebase Storage rules to specific buckets?如何将 Firebase 存储规则部署到特定存储桶?
【发布时间】:2019-05-07 10:01:38
【问题描述】:

我想知道存储规则部署在 Firebase 中的工作原理。

在 Firebase 存储中,我有 2 个存储桶 app.appspot.comapp-mybucket。在我的本地机器上,我有一个 storage.rules 文件,看起来像这样:

service firebase.storage {
  match /b/app.appspot.com/o {
    match /{allPaths=**} {
      allow read, write: if request.auth != null;
    }
  }
  match /b/app-mybucket/o {
    match /{userId}/{allPaths=**} {
      allow read, write: if request.auth.uid == userId;
    }
  }
}

当我firebase deploy --only storage 这些规则被发送到默认的app.appshpot.com 存储桶时,似乎没有任何东西被发送到app-mybucket。我想知道一种可以将规则部署到所有存储桶的方法。

【问题讨论】:

  • 您观察到什么表明规则没有按照您期望的方式部署?您是否真的尝试过使用验证它们工作的客户端代码来测试它们?
  • 不,我没有尝试测试它们,因为我查看了 Firebase 控制台,app.appshpot.com 的规则被 storage.rules 规则覆盖,app-mybucket 规则未被触及并没有反映storage.rules 中写的内容
  • 您能否验证另一个存储桶上的规则实际上并没有按照您的预期方式工作(使用您编写的客户端代码),即使控制台看起来不像您预期​​的那样?
  • 我尝试了一堆组合来检查是否真的是上传的规则有影响,看起来是的,控制台正在显示实际规则。

标签: firebase firebase-storage firebase-security firebase-cli


【解决方案1】:

您也可以使用部署目标。更多信息可以在here找到。

示例

  1. 使用 CLI 应用新目标(在本例中为“main”)
firebase target:apply storage main myproject.appspot.com myproject-eu myproject-ja
  1. 更新firebase.json
{
  "storage": [ {
      "target": "main",  // "main" is the applied target name for the group of Storage buckets
      "rules": "storage.main.rules"  // the file that contains the shared security rules
    }
  ]
}
  1. 使用
firebase deploy --only storage:main

【讨论】:

  • 这个答案对我来说更有用,因为我正在处理多个环境,我可以在我的 CI 管道中使用动态环境变量来执行目标和部署命令。
【解决方案2】:

在您的 firebase.json 文件中,您可以指定如下内容:

  "storage": [{
    "rules": "my-appspot.rules",
    "bucket": "app.appspot.com"
  },
  {
    "rules": "my-bucket.rules",
    "bucket": "app-mybucket"
  }]

上面的示例对每个存储桶使用不同的规则,如果您愿意,您也可以对每个存储桶使用相同的规则。

【讨论】:

  • 能否请您也包括为特定存储桶上传规则的命令?
  • @galki, firebase deploy --only storage:rules 将所有规则部署到所有存储桶
猜你喜欢
  • 2022-01-18
  • 2020-05-24
  • 2017-08-11
  • 2020-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-05
  • 2021-05-30
相关资源
最近更新 更多