Хранилище Firebase, функция onFinalize запускается, даже если в разрешении было отказано

#node.js #google-cloud-functions #firebase-storage

#node.js #google-cloud-функции #firebase-хранилище

Вопрос:

Я пытаюсь создать приложение для Android с firebase, в котором пользователи могут загружать только тогда, когда сервер его одобрил.

Итак, я создал правила хранения firebase, чтобы запретить пользователям создавать файлы, им разрешено только обновлять. Затем, когда загрузка одобрена, сервер создает пустой файл, который пользователи могут обновить.

Теперь у меня проблема, которая onFinalize возникает, даже если в разрешении было отказано (подтверждено в Android, задача завершается ошибкой с отказом в разрешении).

Должен ли я проверять в самом обратном вызове, что разрешения были предоставлены? Я нахожу это довольно вводящим в заблуждение, или я делаю что-то не так…

storage.rules :

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

    function isSignedIn() {
      return request.auth != null;
    }

    match /jobFiles/{userId}/{jobId} {
      function uploadAuthorized() {
        return request.resource.size < 128 * 1024 * 1024;   
      }
      allow update: if isSignedIn() amp;amp; uploadAuthorized();
    }
  }
}
 

index.js

 
exports.jobFile = functions.storage.object()
.onFinalize(async (object) => {
    const fileBucket = object.bucket; // The Storage bucket that contains the file.
    const filePath = object.name; // File path in the bucket.
    const contentType = object.contentType; // File content type.
    const metadata = object.metadata

    log("File finalized...")
...
});
 

Редактировать
Загрузка Android:

         val task = storage
            .child("jobFiles")
            .child(uid)
            .putFile(uri, metadata)

        task
            .addOnSuccessListener {
                ...
            }
            .addOnFailureListener {
                // Permission denied error caught here
            }
 

Исключение:
исключение
введите описание изображения здесь

Журнал Firebase:

 i  functions: Beginning execution of "us-central1-jobFile"
>  {"0":"File finalized...","severity":"INFO","message":""}
 

Комментарии:

1. Можете ли вы рассказать, как и где вы получили ошибку «отказано в разрешении» с полным сообщением об ошибке и трассировкой стека?

2. Я добавил исключение и трассировку стека, но для меня что-то идет не так на стороне firebase…

3. Я бы предложил протестировать правила, разрешив только чтение, запись: если false; и удаление других из правил. Таким образом, можно определить, являются ли правила безопасности проблемой или нет. Также я бы предложил протестировать каждую функцию внутри правил отдельно, затем добавить совпадение, а затем добавить функции с amp;amp; вместе, чтобы изолировать логику. Вы можете использовать симулятор правил Firebase или эмулятор Firebase для быстрой проверки правил безопасности Firebase.