Cree un documento solo si no existe en Firebase Firestore

Lo que estoy tratando de lograr es muy simple. Necesito crear una entrada de usuario en la base de datos solo si no existe.

El flujo de la aplicación:

Crear un usuario con Firebase Auth (obtener UID)Cree un documento de usuario en la base de datos utilizando UID como clave

El código del cliente (operación de creación):

this.db.doc('users/' + uid).set({username: Santa})

Las reglas del almacén de incendios:

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; 
    }
  }
} 

Información adicional:

Como ya sabrás, el código no funciona. Cada vez que ejecuto el código del lado del cliente, el usuario actual se reemplaza por completo con un nuevo documento. Sin embargo, si elimino la siguiente línea de las reglas, todo funciona como se esperaba:

allow update: if request.auth != null && request.auth.uid == uid;

Pero ahora surge la pregunta, ¿cómo protejo los datos dentro del documento del usuario de modificaciones no autorizadas? ¿Algún consejo?

Respuestas a la pregunta(3)

Su respuesta a la pregunta