Borrar y exportar datos del usuario final

Para ayudarle a sus usuarios a controlar sus datos, el equipo de Firebase creó una biblioteca que simplifica dos procesos de datos de usuario comunes:

  • clearData : elimina los datos de un usuario de servicios específicos de Firebase (actualmente Realtime Database, Firestore y Storage) cuando elimina su cuenta a través de Firebase Authentication.

  • exportData : guarda una copia de los datos de un usuario de los servicios de Firebase en una cadena JSON y la carga en Cloud Storage para que puedan descargarla fácilmente por sí mismos.

Continúe leyendo para descubrir cómo agregar funciones a su aplicación o acceda directamente al código en el repositorio de privacidad de usuario de Firebase en GitHub .

Agregue clearData o exportData a su aplicación

Las funciones clearData y exportData en la biblioteca se implementan como funciones de nube que operan con datos en Realtime Database, Cloud Storage y Cloud Firestore. Agregar las funciones en su propia aplicación es un proceso de tres pasos:

  1. Edite el archivo user_privacy.json de la biblioteca para reflejar el esquema de Realtime Database, Cloud Firestore y Cloud Storage de su aplicación.
  2. Implemente clearData y exportData como funciones en la nube.
  3. Implemente activadores para las funciones de su aplicación.
  4. Proteja los datos clearData con reglas de almacenamiento.

Edite el archivo user_privacy.json de la biblioteca

Para comenzar, clone o descargue el repositorio de GitHub sobre privacidad del usuario de Firebase .

Cuando hayas hecho eso, abre functions/user_privacy.json en un editor de texto. El archivo json tiene una serie de rutas personalizables que las funciones clearData y exportData utilizan para encontrar los datos de su aplicación en Realtime Database, Cloud Firestore y Cloud Storage. Si su aplicación solo usa uno o dos de esos servicios, comience eliminando los objetos JSON asociados con los servicios no utilizados.

Una vez eliminados los objetos, puede comenzar a reemplazar los valores de marcador de posición de los servicios restantes con las estructuras de datos reales que utiliza su aplicación.

Agregar rutas de bases de datos en tiempo real a los datos del usuario

Para personalizar user_privacy.json para la instancia de Realtime Database de su aplicación, reemplace la lista de cadenas de marcador de posición en "database" con rutas reales a los datos del usuario:

...
  "database": {
    "clear": [
      "/users/UID_VARIABLE",    // Replace with your
      "/admins/UID_VARIABLE"    // actual RTDB paths
    ],
    "export": [
      "/users/UID_VARIABLE",    // Replace with your
      "/admins/UID_VARIABLE"    // actual RTDB paths
    ]
  },
...

Si solo desea agregar una de las funciones a su aplicación, puede eliminar el objeto de la otra función, en lugar de completarlo con sus datos.

Agregar objetos de Cloud Firestore que contengan datos de usuario

Para personalizar user_privacy.json para la instancia de Cloud Firestore de tu aplicación, reemplaza la lista de objetos de marcador de posición en "firestore" con objetos reales de Cloud Firestore que contienen datos de usuario:

...
  "firestore": {
    "clear": [
      {"collection": "users", "doc": "UID_VARIABLE", "field": "name"},
      {"collection": "users", "doc": "UID_VARIABLE"},    // Replace with your
      {"collection": "admins", "doc": "UID_VARIABLE"}    // actual Firestore paths
    ],
    "export": [
      {"collection": "users", "doc": "UID_VARIABLE", "field": "name"},
      {"collection": "users", "doc": "UID_VARIABLE"},    // Replace with your
      {"collection": "admins", "doc": "UID_VARIABLE"}    // actual Firestore paths
    ]
  },
...

Si solo desea agregar una de las funciones a su aplicación, puede eliminar el objeto de la otra función, en lugar de completarlo con sus datos.

Agregue el depósito de Cloud Storage y el nombre del archivo con datos de usuario

Para personalizar user_privacy.json para la instancia de Cloud Storage de tu aplicación, reemplaza el depósito de almacenamiento del marcador de posición y el nombre del archivo en "storage" con los valores reales:

...
  "storage": {
    "clear": [    // Replace with your actual storage data
      ["clear-export.appspot.com", "UID_VARIABLE/sample_data.json"],
      ["clear-exportappspot.com", "UID_VARIABLE"]
    ],
    "export": [    // Replace with your actual storage data
      ["clear-export.appspot.com", "UID_VARIABLE/sample_data.json"]
    ]
  },
...

Si solo desea agregar una de las funciones a su aplicación, puede eliminar el objeto de la otra función, en lugar de completarlo con sus datos.

Implemente clearData y exportData como funciones en la nube

Si aún no está familiarizado con Cloud Functions, lea cómo utilizarlas en la guía de introducción a Cloud Functions .

Una vez que se sienta cómodo con Cloud Functions, agregue las funciones clearData y exportData a su proyecto:

  1. Copie su user_data.json personalizado en su directorio functions .
  2. Copie el código del index.js de la biblioteca de privacidad del usuario al index.js de su proyecto.
    • Si no está utilizando clearData , omita las funciones clearData , clearDatabaseData , clearFirestoreData y clearStorageData .
    • Si no está utilizando exportData , omita las funciones exportData , exportDatabaseData , exportFirestoreData y exportStorageData .
  3. Implementa tus funciones.

Implementar activadores para clearData y exportData

Cada función requiere un disparador diferente:

  • clearData : se activa cuando un usuario elimina su cuenta mediante autenticación.
  • exportData : desencadenado por una solicitud HTTP.

Implementar un disparador clearData

Para activar un evento clearData , debe utilizar un método de Autenticación. Si aún no lo ha hecho, agregue Autenticación a su aplicación: plataformas Apple , Android o web .

Luego, agregue una forma de invocar el método delete del SDK de autenticación para su plataforma:

iOS+

FirebaseAuth.User.delete { error in
  if let error = error {
    print("Error deleting user: \(error)")
  }
}

Androide

FirebaseAuth.getCurrentUser().delete();

Web

firebase.auth().currentUser.delete().catch(function(error) {
  if (error.code === 'auth/requires-recent-login') {
    window.alert('Please sign-in and try again.');
    firebase.auth().signOut();
  }
});

Implementar un disparador exportData

Para implementar un activador exportData , agregue un botón o enlace a su aplicación que invoque la función a través de una solicitud HTTP. Obtenga más información sobre cómo invocar funciones a través de HTTP en Llamar a funciones mediante solicitudes HTTP .

Pedir detalles:

  • Tipo: POST
  • URL: https://us-central1-<var>PROJECT-ID<.var>.cloudfunctions.net/exportData
  • Cuerpo: <var>CURRENT_USER'S_UID</var>

Invocar la función directamente en Firebase Hosting

Si su aplicación es una aplicación web alojada en Firebase Hosting, puede invocar su función clearData a través de una entrada rewrite en el archivo firebase.json del sitio:

  "hosting": {
    "rewrites": [
       {"source": "/exportData", "function": "exportData"}
    ]
  }

Proteger datos exportData con reglas de almacenamiento

Para mantener la privacidad de los datos exportados de sus usuarios, agregue reglas de Cloud Storage que restrinjan el acceso al usuario exportador.

  1. Visita Almacenamiento en Firebase console .
  2. Abra la pestaña Reglas .
  3. Pegue la siguiente regla y luego haga clic en Publicar :
service firebase.storage {
  match /b/{bucket}/o {
    match /exportData {
      // Only allow access to the user who requested the export
      match /{uid} {
        allow read, write: if request.auth.uid == uid
      }
      match /{uid}/{path=**} {
        allow read, write: if request.auth.uid == uid
      }
    }
    // Other application rules...
  }
}