# #ios #firebase-storage #emulation #rules #firebase-tools
Вопрос:
Мое приложение работает просто отлично, но когда я использую эмуляторы Firebase, у меня возникает проблема с несоблюдением правил хранения. Я скачал storage.rules
файл, и он находится в том же каталоге, firebase-json
что и файл. Набор эмуляторов запускается просто отлично, и я вижу, что эмулятор хранилища работает. Однако, когда я пытаюсь загрузить изображение (как я делаю в живом приложении) Я получаю сообщение об ошибке.
Error while uploading file: Error Domain=FIRStorageErrorDomain Code=-13021 "User does not have permission to access gs://my-stuff-7796d.appspot.com/Profiles/0ye7psTQA4xR6DfjZRXjjtCWKyPw.jpg." UserInfo={object=Profiles/0ye7psTQA4xR6DfjZRXjjtCWKyPw.jpg, ResponseBody={"error":{"code":403,"message":"Permission denied. No WRITE permission."}}, bucket=my-stuff-7796d.appspot.com, data={length = 74, bytes = 0x7b226572 726f7222 3a7b2263 6f646522 ... 73696f6e 2e227d7d }, data_content_type=application/json; charset=utf-8, NSLocalizedDescription=User does not have permission to access gs://my-stuff-7796d.appspot.com/Profiles/0ye7psTQA4xR6DfjZRXjjtCWKyPw.jpg., ResponseErrorDomain=com.google.HTTPStatus, ResponseErrorCode=403}
Правила хранения.:
service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
allow read, write: if request.auth != null;
}
}
}
Опять же, работа против живой базы огня работает просто отлично, и правила соблюдаются.
Вот мой файл firebase.json
"firestore": {
"rules": "firestore.rules",
"indexes": "firestore.indexes.json"
},
"storage": {
"rules": "storage.rules"
},
"emulators": {
"auth": {
"port": 9099
},
"firestore": {
"port": 8080
},
"storage": {
"port": 9199
},
"ui": {
"enabled": true
}
}
}
Когда я запускаю свое приложение, это код, который я инициализирую после вызова FirebaseApp.configure
Auth.auth().useEmulator(withHost:"localhost", port:9099)
Storage.storage().useEmulator(withHost:"localhost", port:9199)
let settings = Firestore.firestore().settings
settings.host = "localhost:8080"
settings.isPersistenceEnabled = false
settings.isSSLEnabled = false
Firestore.firestore().settings = settings
Что я упускаю, или это ошибка?
Комментарии:
1. В дополнение к его проблеме, если я вручную добавлю изображение в хранилище в консоли эмулятора, я смогу читать из своего приложения. Приложение просто не будет загружать изображение, хотя это происходит в реальной среде. Если после успешной загрузки вручную и чтения изображения из приложения я попытаюсь загрузить новое изображение из приложения, загрузка завершится неудачно, но предыдущее, загруженное мной вручную, будет удалено.
2. Еще одно обновление. Я только что обновился до Firebase-tools 9.20.0, и теперь, когда я пытаюсь загрузить изображение, симуляторы просто выходят из строя. 🙁
3. В своем нынешнем состоянии эмулятор хранилища Firebase кажется несколько ненадежным. Подвержен авариям или ведет себя непредсказуемым образом.
4. Я подал сообщение об ошибке, и оно было проверено, поэтому жду обновления
5. @StewartLynch Не могли бы вы сослаться на сообщение об ошибке, которое вы подали, пожалуйста?