Загрузка изображения и Firebase говорит: «У пользователя нет прав доступа к этому объекту», даже если настройки хранилища общедоступны. - PullRequest
1 голос
/ 25 апреля 2019

Я пытаюсь загрузить изображение, а затем сохранить местоположение загрузки указанного изображения в val. Вчера все работало на 100% без проблем. Я не изменил код и не могу загрузить изображение сейчас, теперь оно говорит

Не удалось загрузить изображение. У пользователя нет прав доступа к этому объекту.

Я проверил все посты с переполнением стека / Reddit на одну и ту же тему, и все они говорят об изменении разрешений моих правил на общедоступные.

Мои правила общедоступны

service firebase.storage {
  match /b/savephoto-a1cc3.appspot.com/o {
    match /{allPaths=**} {
      allow read, write;
    }
  }
}

Это реализация загрузки изображения.

      val ref = FirebaseStorage.getInstance().getReference("/images/profilePictures/$filename")

        //Stores File
        ref.putFile(selectedPhoto!!)
            .addOnSuccessListener {
                Log.d("main", "Succesfully Uploaded Image ${it.metadata?.path}")

                //Gets Download Link for Image
                ref.downloadUrl.addOnSuccessListener {
                    val downloadImg = it.toString()
                    Log.d("main", "Profile Picture Location $it")
                    //Create User
                    createUser(downloadImg, age, gender, firstName, lastName)
                }
            }
            .addOnFailureListener {
                Log.d("main", "Failed to Upload Image ${it.message}")
            }
    }

все еще не уверен, почему я получаю

Не удалось загрузить изображение. У пользователя нет прав доступа к этому объекту.

, даже если правила установлены как общедоступные, и мой код выглядит отлично. Вчера он правильно загружал изображения, но теперь мне выдают эту ошибку.

1 Ответ

1 голос
/ 25 апреля 2019

Жесткое кодирование имени корзины не очень хорошая идея.Вместо этого используйте переменную местозаполнитель для имени сегмента, как указано в документации .

Правила безопасности хранилища должны сначала указывать службу (в нашем случае firebase.storage) и облачное хранилище.bucket (через match / b / {bucket} / o) , по которому оцениваются правила.Правила по умолчанию требуют Firebase Authentication, но вот несколько примеров других общих правил с другим контролем доступа.

Измените ваши правила хранения на приведенные ниже правила, чтобы добиться того, что вы хотите.

service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write;
    }
  }
}

enter image description here

...