Ошибка при загрузке файла в облачное хранилище Firebase: «Список объектов в корзине запрещен для rules_version = 1» - PullRequest
0 голосов
/ 10 мая 2019

Я установил в своем приложении firebase auth и облачное хранилище.Однако всякий раз, когда я пытаюсь загрузить файл, я получаю сообщение об ошибке, о котором не могу найти никакой информации.Ошибка 400: Плохой запрос со следующим сообщением

Listing objects in a bucket is disallowed for rules_version = "1". Please update storage security rules to rules_verison = "2" to use list.

Кажется, я не могу найти ничего об обновлении security rules_version.Обратите внимание, что когда я смотрю на консоль Firebase, загрузка на самом деле проходит успешно, но HTTP-возврат все еще является ошибкой, описанной выше.Что это означает, перечисляя объекты, и как я могу обновить свои правила безопасности?

Для получения дополнительной информации, мой код загрузки (в Kotlin):

 fun uploadImage(uri: Uri, path: String): Task<Uri> {
            val storageRef = FirebaseStorage.getInstance().reference
            val storagePath = storageRef.child(path)
            return storagePath.putFile(uri).continueWithTask{ storageRef.downloadUrl }
 }

Я звоню с

public override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        if (requestCode in 0..2 && resultCode == Activity.RESULT_OK) {
            val cropImageUri = CropImage.getActivityResult(data).uri
            val systemTime = System.currentTimeMillis()
            val path = "$userId/$systemTime"
            //IMAGE UPLOAD HERE:
            FirebaseImageResource.uploadImage(cropImageUri, path)
                    .addOnCompleteListener {
                if (it.isSuccessful) {
                    GlideApp.with(this)
                            .load(cropImageUri)
                            .into(imageViewForPosition(requestCode)!!)
                    imageUris[requestCode] = it.result.toString()
                }
            }
        }
    }

По умолчанию применяются мои правила для firebase:

service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write: if request.auth != null;
    }
  }
}

Я также успешно авторизируюсь с помощью входа в Facebook

override fun onSuccess(loginResult: LoginResult) {
                val credential = FacebookAuthProvider.getCredential(loginResult.accessToken.token)
                auth.signInWithCredential(credential)
            }

(Сейчас у него нет успешного прослушивателя,но я знаю, что это работает, потому что, когда я его не использую, вместо этого я получаю несанкционированную ошибку, и файл фактически не загружается)

Ответы [ 2 ]

2 голосов
/ 12 мая 2019

Просто замените код загрузки с

fun uploadImage(uri: Uri, path: String): Task<Uri> {
        val storageRef = FirebaseStorage.getInstance().reference
        val storagePath = storageRef.child(path)
        return storagePath.putFile(uri).continueWithTask{ storageRef.downloadUrl }} 

до

fun uploadImage(uri: Uri, path: String): Task<Uri> {
        val storageRef = FirebaseStorage.getInstance().reference
        val storagePath = storageRef.child(path)
        return storagePath.putFile(uri).continueWithTask{ storagePath.downloadUrl }}
0 голосов
/ 16 мая 2019

Вы должны добавить это к своим правилам хранения Firebase:

rules_version = '2';

Примером этого является:

rules_version = '2';
service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write: if request.auth != null;
    }
  }
}

Я подозреваю, что это случай не такполезное сообщение об ошибке.

...