Ir a la consola

Agrega funciones para borrar y exportar datos del usuario

Para que puedas ayudar a tus usuarios a controlar sus datos, el equipo de Firebase creó una biblioteca que simplifica dos procesos comunes de los datos del usuario:

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

  • exportData: guarda una copia de los datos de usuario de los servicios de Firebase en una string JSON y la sube a Cloud Storage para que el usuario pueda descargarla fácilmente.

Sigue leyendo para descubrir cómo agregar las funciones a tu app o accede directamente al código en el repositorio de GitHub para la protección de la privacidad de los usuarios de Firebase.

Agrega clearData o exportData a tu app

Las funciones clearData y exportData de la biblioteca se implementan como opciones de Cloud Functions que se aplican sobre datos de Realtime Database, Cloud Storage y Cloud Firestore. Para agregar las funciones a tu propia app, debes completar un proceso de tres pasos:

  1. Edita el archivo user_privacy.json de la biblioteca para reflejar el esquema de Realtime Database, Cloud Firestore y Cloud Storage de tu app.
  2. Implementa clearData y exportData como opciones de Cloud Functions.
  3. Aplica activadores para las funciones de tu app.
  4. Protege los datos de clearData con reglas de almacenamiento.

Edita el archivo user_privacy.json de la biblioteca

Para comenzar, clona o descarga el repositorio de GitHub de privacidad de los usuarios de Firebase.

Cuando termines, abre functions/user_privacy.json en un editor de texto. El archivo json contiene una serie de rutas de acceso personalizables que las funciones clearData y exportData utilizan para buscar los datos de la app en Realtime Database, Cloud Firestore y Cloud Storage. Si tu app solo utiliza uno o dos de esos servicios, comienza por borrar los objetos JSON asociados con los servicios sin utilizar.

Sin esos objetos, puedes comenzar a reemplazar los valores que se utilizan como marcadores de posición de los servicios restantes por las estructuras de datos reales que utiliza tu app.

Agrega rutas de acceso de Realtime Database a los datos de usuario

Para personalizar user_privacy.json en la instancia de Realtime Database de tu app, reemplaza la lista de cadenas que se utilizan como marcadores de posición en "database" por rutas de acceso 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 deseas agregar una de las funciones a tu app, puedes borrar el objeto de la otra función, en lugar de completarla con tus datos.

Agrega objetos de Cloud Firestore que contengan datos de usuario

Para personalizar user_privacy.json en la instancia de Cloud Firestore de tu app, reemplaza la lista de objetos que se utilizan como marcadores de posición en "firestore" por objetos de Cloud Firestore reales que contengan 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 deseas agregar una de las funciones a tu app, puedes borrar el objeto de la otra función, en lugar de completarla con tus datos.

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

Para personalizar user_privacy.json en la instancia de Cloud Storage de tu app, reemplaza el nombre de archivo y el depósito de almacenamiento que se utilizan como marcadores de posición en "storage" por 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 deseas agregar una de las funciones a tu app, puedes borrar el objeto de la otra función, en lugar de completarla con tus datos.

Implementa clearData y exportData como Cloud Functions

Si todavía no conoces Cloud Functions, investiga la forma de utilizar esas funciones en la guía de introducción de Cloud Functions.

Cuando ya te sientas cómodo con Cloud Functions, agrega las funciones clearData y exportData a tu proyecto:

  1. Copia el archivo user_data.json personalizado al directorio functions.
  2. Copia el código del archivo index.js de la biblioteca de privacidad del usuario al archivo index.js de tu proyecto.
    • Si no usas clearData, omite las funciones clearData, clearDatabaseData, clearFirestoreData y clearStorageData.
    • Si no usas exportData, omite las funciones exportData, exportDatabaseData, exportFirestoreData y exportStorageData.
  3. Implementa tus funciones.

Aplica activadores para clearData y exportData

Cada función requiere un activador diferente:

  • clearData: se activa cuando un usuario borra su cuenta a través de Authentication.
  • exportData: se activa a través de una solicitud HTTP.

Aplica un activador clearData

Para activar un evento clearData, debes utilizar un método de Authentication. Si aún no lo hiciste, agrega Authentication a tu app (para iOS, Android, o web).

A continuación, agrega una forma de invocar el método delete del SDK de Authentication para tu plataforma:

iOS

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

Android

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

Aplica un activador exportData

Para aplicar un activador exportData, agrega un botón o vínculo a tu app con el que se invoque la función a través de una solicitud HTTP. Obtén más información sobre la invocación de funciones con HTTP en Llama a funciones mediante solicitudes HTTP.

Detalles de la solicitud:

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

Invoca la función directamente en Firebase Hosting

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

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

Protege los datos de exportData con reglas de almacenamiento

Para mantener la privacidad de los datos de usuario exportados, agrega las reglas de Cloud Storage que restringen el acceso al usuario exportador.

  1. Ve a Almacenamiento en Firebase console.
  2. Abre la pestaña Reglas.
  3. Pega la siguiente regla y, luego, haz 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...
  }
}