How to set storage rules so I can run my Firebase storage emulator?
Asked Answered
B

1

14

When I run firebase emulators:start I have this error

Error: Cannot start the Storage emulator without rules file specified In firebase.json

Before installing Storage emulator, I can set the rule for Firestore like this

{
  "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
    }
  }
}

I believe I have to set the rule for storage in here. But I don't know how. I can't find the docs for this

Borchert answered 5/7, 2021 at 10:5 Comment(0)
B
40

The error you're seeing is caused by a missing storage rules file. The solution is very similar to the way you set rules for Firestore.

  1. Create a file called storage.rules in the same directory as firebase.json.
  2. Add the following lines to it:
rules_version = '2';
service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write: if request.auth != null;
    }
  }
}
  1. Specify the rules file for the storage emulator in your firebase.json:
"emulators": {
  "storage": {
    "port": 9199,
    "rules": "storage.rules"
  },
}

Now, it's ready to start emulators.

Update

Thank you everyone for warning about the change in the newer versions. With the latest version, storage.rules should be defined at the top level in your firebase.json:

"emulators": {
  "storage": {
    "port": 9199
  },
},
"storage": {
  "rules": "storage.rules"
}
Batty answered 9/7, 2021 at 14:41 Comment(3)
With the latest version I had to place storage/rules not within emulators/storage, but at the top level in firebase.json.Ananna
@PeterKoltai I also needed to do that. Thanks.Gentianaceous
For me the "rules": "storage.rules" entry had to be placed in the top level place in the firebase.json file, not within the "emulators" entry but in the "storage"Gladdy

© 2022 - 2024 — McMap. All rights reserved.