У меня проблема с наблюдателем Firestore и связанными с ним правилами. Я пытаюсь иметь правила, которые позволяют пользователю видеть только приглашения, содержащие адрес электронной почты пользователя. Однако, если я удаляю документ из коллекции, наблюдатель снимка выдает ошибку Uncaught Error in onSnapshot: FirebaseError: Null value error. for 'get' @ L92
.
Вот мои правила:
match /invites/{inviteID} {
function isSignedIn() {
return request.auth != null;
}
function isUserInvite() {
return request.auth.token.email != null &&
request.auth.token.email == resource.data.user_email;
}
allow read: if isSignedIn() && isUserInvite();
allow write: if true;
}
А вот мой слушатель.
firebase.firestore()
.collection("invites")
.where(`user_email`, '==', myUserEmail) // this would be the users email
.onSnapshot((snapshot) => {
snapshot.forEach( doc => {
console.log(doc.id, doc.data())
})
})
Работает для просмотра новых документов, но не удаляется при удалении документа. Следующий код заставляет наблюдателя выдавать ошибку.
// creates a new invite and the snapshot listener informs me
await firebase.firestore()
.collection('invites')
.doc("invite_1")
.set({
user_email: someUserEmail, // use the users email here
date_added: firebase.firestore.FieldValue.serverTimestamp()
})
// deletes the invite, but the snapshot throws an error
await firebase.firestore()
.doc(`invites/invite_1`)
.delete()
ОБНОВЛЕНИЕ
Я обнаружил, что это происходит только в эмуляторе firestore, а не в производстве. И эмулятор, и производство имеют одинаковые правила.