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 chave

O 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?

questionAnswers(3)

yourAnswerToTheQuestion