Crie um documento apenas se ele não existir no Firebase Firestore
O que estou tentando alcançar é muito simples. Eu preciso criar uma entrada de usuário no banco de dados somente se ela não existir.
O fluxo do aplicativo:
Crie um usuário com o Firebase Auth (obtenha UID)Crie um documento de usuário no banco de dados usando o UID como a chaveO código do cliente (operação de criação):
this.db.doc('users/' + uid).set({username: Santa})
As regras do firestore:
service cloud.firestore {
match /databases/{database}/documents {
match /users/{uid} {
allow create: if
request.auth != null &&
request.auth.uid == uid &&
!exists(/databases/$(database)/documents/users/$(uid));
allow update: if request.auth != null && request.auth.uid == uid;
}
}
}
Informação adicional:
Como você já deve saber, o código não funciona. Sempre que executo o código do lado do cliente, o usuário atual é completamente substituído por um novo documento. No entanto, se eu excluir a seguinte linha das regras, tudo funcionará conforme o esperado:
allow update: if request.auth != null && request.auth.uid == uid;
Mas agora surge a pergunta: como faço para proteger dados dentro do documento do usuário contra modificações não autorizadas? Algum conselho?