如何设置存储规则以便运行我的 Firebase 存储模拟器?

Agu*_*ana 14 firebase firebase-tools firebase-storage firebase-admin firebase-cli

当我运行时firebase emulators:start出现此错误

错误:如果没有在 firebase.json 中指定规则文件,则无法启动存储模拟器

在安装存储模拟器之前,我可以像这样设置 Firestore 规则

{
  "firestore": {
    "rules": "./functions/firestore.rules"
  },
  "functions": {
    "predeploy": [
      "npm --prefix \"$RESOURCE_DIR\" run lint",
      "npm --prefix \"$RESOURCE_DIR\" run build"
    ]
  },
  "emulators": {
    "auth": {
      "port": 9099
    },
    "functions": {
      "port": 5001
    },
    "firestore": {
      "port": 8080
    },
    "storage": {
      "port": 9199
    },
    "ui": {
      "enabled": true
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我想我必须在这里制定存储规则。但我不知道怎么办。我找不到这方面的文档

Ste*_*wie 37

您看到的错误是由缺少存储规则文件引起的。该解决方案与为 Firestore 设置规则的方式非常相似。

  1. storage.rules在与 firebase.json 相同的目录中创建一个名为的文件。
  2. 将以下行添加到其中:
rules_version = '2';
service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write: if request.auth != null;
    }
  }
}
Run Code Online (Sandbox Code Playgroud)
  1. 在 firebase.json 中指定存储模拟器的规则文件:
"emulators": {
  "storage": {
    "port": 9199,
    "rules": "storage.rules"
  },
}
Run Code Online (Sandbox Code Playgroud)

现在,它已准备好启动模拟器。

更新

感谢大家对新版本中的更改发出的警告。对于最新版本,storage.rules应在 firebase.json 的顶层定义:

"emulators": {
  "storage": {
    "port": 9199
  },
},
"storage": {
  "rules": "storage.rules"
}
Run Code Online (Sandbox Code Playgroud)

  • 在最新版本中,我必须将“存储/规则”不在“模拟器/存储”中,而是放在“firebase.json”的顶层。 (11认同)
  • 对我来说,“rules”:“storage.rules”条目必须放置在 firebase.json 文件的顶层位置,而不是“模拟器”条目中,而是“存储”中 (2认同)