Я хочу сделать так, чтобы аутентифицированные пользователи могли выполнять запись в коллекцию, доступную только для чтения / записи / создания этого пользователя.Я борюсь с самой основной настройкой Firestore.Мои правила для firestore выглядят так:
service cloud.firestore {
match /databases/{database}/documents {
match /{userId} {
allow read, write, create: if request.auth.uid == userId;
}
}
}
Я предполагаю, что это предотвратит чтение / запись / создание базы данных, если только начальная часть пути не совпадает с UID вошедшего в систему пользователя.
Мой код JavaScript выглядит следующим образом:
function addSomeData(data) {
console.log( "Sending data with: ", user.uid, data );
db.collection(user.uid).add({ data })
.then(function(docRef) {
console.log("Document written with ID: ", docRef.id);
})
.catch(function(error) {
console.error("Error adding document: ", error);
});
}
Я определенно правильно установил user.id после успешного входа в систему.
Такое использование всегда выдает мне ошибку в консоли:
Ошибка при добавлении документа: ошибка: отсутствуют или отсутствуют разрешения.
Если я вернусь к таким исходным правилам, как этот, документ будет успешно создан:
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write;
}
}
}
То, что я пытаюсь сделать, - это начинать каждую коллекцию с UID вошедшего в систему пользователя.Итак, пример формы данных может быть таким:
/ax323/brty/data="Hello"
/ax323/98da/data="Goodbye"
/br981/ha31/data="No comment"
Итак, ax323 - это UID в Firebase, как и br981.У ax323 есть два документа в коллекции, а у br981 - один.
Проблема в форме моих данных?
Я не совсем понимаю, что означает {document=**}
в исходных правилах, и нужно ли мне преобразовывать мое правило аутентификации во что-то подобное.