#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.