Cancella ed esporta i dati dell'utente finale

Per aiutarti ad aiutare i tuoi utenti a controllare i propri dati, il team Firebase ha creato una libreria che semplifica due processi comuni relativi ai dati utente:

  • clearData : elimina i dati di un utente da servizi Firebase specifici (attualmente Realtime Database, Firestore e Storage) quando elimina il proprio account tramite l'autenticazione Firebase.

  • exportData : salva una copia dei dati di un utente dai servizi Firebase in una stringa JSON e la carica su Cloud Storage in modo che possano scaricarli facilmente da soli.

Continua a leggere per scoprire come aggiungere le funzioni alla tua app o passa direttamente al codice nel repository GitHub sulla privacy degli utenti di Firebase .

Aggiungi clearData o exportData alla tua app

Le funzioni clearData ed exportData nella libreria sono implementate come funzioni Cloud che operano sui dati in Realtime Database, Cloud Storage e Cloud Firestore. L'aggiunta delle funzioni nella tua app è un processo in tre fasi:

  1. Modifica il file user_privacy.json della libreria in modo che rifletta lo schema Realtime Database, Cloud Firestore e Cloud Storage della tua app.
  2. Distribuisci clearData ed exportData come Cloud Functions.
  3. Implementa trigger per le funzioni nella tua app.
  4. Proteggi i dati clearData con regole di archiviazione.

Modifica il file user_privacy.json della libreria

Per iniziare, clona o scarica il repository GitHub sulla privacy degli utenti Firebase .

Dopo averlo fatto, apri functions/user_privacy.json in un editor di testo. Il file json ha una serie di percorsi personalizzabili che le funzioni clearData ed exportData utilizzano per trovare i dati della tua app in Realtime Database, Cloud Firestore e Cloud Storage. Se la tua app utilizza solo uno o due di questi servizi, inizia eliminando gli oggetti JSON associati ai servizi inutilizzati.

Una volta eliminati gli oggetti, puoi iniziare a sostituire i valori segnaposto dei servizi rimanenti con le strutture dati effettive utilizzate dalla tua app.

Aggiungi percorsi di Realtime Database ai dati utente

Per personalizzare user_privacy.json per l'istanza Realtime Database della tua app, sostituisci l'elenco di stringhe segnaposto in "database" con percorsi effettivi ai dati utente:

...
  "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
    ]
  },
...

Se desideri aggiungere solo una delle funzioni alla tua app, puoi eliminare l'oggetto dell'altra funzione, invece di compilarlo con i tuoi dati.

Aggiungi oggetti Cloud Firestore contenenti dati utente

Per personalizzare user_privacy.json per l'istanza Cloud Firestore della tua app, sostituisci l'elenco di oggetti segnaposto in "firestore" con oggetti Cloud Firestore effettivi contenenti dati utente:

...
  "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
    ]
  },
...

Se desideri aggiungere solo una delle funzioni alla tua app, puoi eliminare l'oggetto dell'altra funzione, invece di compilarlo con i tuoi dati.

Aggiungi il bucket Cloud Storage e il nome file con i dati utente

Per personalizzare user_privacy.json per l'istanza Cloud Storage della tua app, sostituisci il bucket di archiviazione segnaposto e il nome del file in "storage" con i valori effettivi:

...
  "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"]
    ]
  },
...

Se desideri aggiungere solo una delle funzioni alla tua app, puoi eliminare l'oggetto dell'altra funzione, invece di compilarlo con i tuoi dati.

Distribuisci clearData ed exportData come Cloud Functions

Se non hai ancora familiarità con Cloud Functions, leggi come utilizzarle nella guida introduttiva di Cloud Functions .

Una volta acquisita dimestichezza con Cloud Functions, aggiungi le funzioni clearData ed exportData al tuo progetto:

  1. Copia il user_data.json personalizzato nella directory functions .
  2. Copia il codice index.js della libreria della privacy dell'utente index.js del tuo progetto.
    • Se non stai utilizzando clearData , ometti le funzioni clearData , clearDatabaseData , clearFirestoreData e clearStorageData .
    • Se non utilizzi exportData , ometti le funzioni exportData , exportDatabaseData , exportFirestoreData e exportStorageData .
  3. Distribuisci le tue funzioni.

Implementare i trigger per clearData ed exportData

Ciascuna funzione richiede un trigger diverso:

  • clearData : attivato quando un utente elimina il proprio account tramite l'autenticazione.
  • exportData : attivato da una richiesta HTTP.

Implementare un trigger clearData

Per attivare un evento clearData , è necessario utilizzare un metodo da Authentication. Se non l'hai ancora fatto, aggiungi l'Autenticazione alla tua app: piattaforme Apple , Android o web .

Quindi, aggiungi un modo per richiamare il metodo delete dell'SDK di autenticazione per la tua piattaforma:

iOS+

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

Androide

FirebaseAuth.getCurrentUser().delete();

ragnatela

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

Implementare un trigger exportData

Per implementare un trigger exportData , aggiungi un pulsante o un collegamento alla tua app che richiami la funzione tramite una richiesta HTTP. Scopri di più sulla chiamata di funzioni su HTTP in Chiama funzioni tramite richieste HTTP .

Dettagli richiesta:

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

Richiama la funzione direttamente in Firebase Hosting

Se la tua app è un'app Web ospitata su Firebase Hosting, puoi richiamare la funzione clearData tramite una voce rewrite nel file firebase.json del sito:

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

Proteggi i dati exportData con regole di archiviazione

Per mantenere privati ​​i dati esportati dei tuoi utenti, aggiungi regole Cloud Storage che limitano l'accesso all'utente esportatore.

  1. Visita Archiviazione nella console Firebase .
  2. Apri la scheda Regole .
  3. Incolla la seguente regola, quindi fai clic su Pubblica :
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...
  }
}

Aggiungi clearData o exportData alla tua app

Le funzioni clearData ed exportData nella libreria sono implementate come funzioni Cloud che operano sui dati in Realtime Database, Cloud Storage e Cloud Firestore. L'aggiunta delle funzioni nella tua app è un processo in tre fasi:

  1. Modifica il file user_privacy.json della libreria in modo che rifletta lo schema Realtime Database, Cloud Firestore e Cloud Storage della tua app.
  2. Distribuisci clearData ed exportData come Cloud Functions.
  3. Implementa trigger per le funzioni nella tua app.
  4. Proteggi i dati clearData con regole di archiviazione.

Modifica il file user_privacy.json della libreria

Per iniziare, clona o scarica il repository GitHub sulla privacy degli utenti Firebase .

Dopo averlo fatto, apri functions/user_privacy.json in un editor di testo. Il file json ha una serie di percorsi personalizzabili che le funzioni clearData ed exportData utilizzano per trovare i dati della tua app in Realtime Database, Cloud Firestore e Cloud Storage. Se la tua app utilizza solo uno o due di questi servizi, inizia eliminando gli oggetti JSON associati ai servizi inutilizzati.

Una volta eliminati gli oggetti, puoi iniziare a sostituire i valori segnaposto dei servizi rimanenti con le strutture dati effettive utilizzate dalla tua app.

Aggiungi percorsi di Realtime Database ai dati utente

Per personalizzare user_privacy.json per l'istanza Realtime Database della tua app, sostituisci l'elenco di stringhe segnaposto in "database" con percorsi effettivi ai dati utente:

...
  "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
    ]
  },
...

Se desideri aggiungere solo una delle funzioni alla tua app, puoi eliminare l'oggetto dell'altra funzione, invece di compilarlo con i tuoi dati.

Aggiungi oggetti Cloud Firestore contenenti dati utente

Per personalizzare user_privacy.json per l'istanza Cloud Firestore della tua app, sostituisci l'elenco di oggetti segnaposto in "firestore" con oggetti Cloud Firestore effettivi contenenti dati utente:

...
  "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
    ]
  },
...

Se desideri aggiungere solo una delle funzioni alla tua app, puoi eliminare l'oggetto dell'altra funzione, invece di compilarlo con i tuoi dati.

Aggiungi il bucket Cloud Storage e il nome file con i dati utente

Per personalizzare user_privacy.json per l'istanza Cloud Storage della tua app, sostituisci il bucket di archiviazione segnaposto e il nome file in "storage" con i valori effettivi:

...
  "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"]
    ]
  },
...

Se desideri aggiungere solo una delle funzioni alla tua app, puoi eliminare l'oggetto dell'altra funzione, invece di compilarlo con i tuoi dati.

Distribuisci clearData ed exportData come Cloud Functions

Se non hai ancora familiarità con Cloud Functions, leggi come utilizzarle nella guida introduttiva di Cloud Functions .

Una volta acquisita dimestichezza con Cloud Functions, aggiungi le funzioni clearData ed exportData al tuo progetto:

  1. Copia il user_data.json personalizzato nella directory functions .
  2. Copia il codice index.js della libreria della privacy dell'utente index.js del tuo progetto.
    • Se non stai utilizzando clearData , ometti le funzioni clearData , clearDatabaseData , clearFirestoreData e clearStorageData .
    • Se non utilizzi exportData , ometti le funzioni exportData , exportDatabaseData , exportFirestoreData e exportStorageData .
  3. Distribuisci le tue funzioni.

Implementare i trigger per clearData ed exportData

Ciascuna funzione richiede un trigger diverso:

  • clearData : attivato quando un utente elimina il proprio account tramite l'autenticazione.
  • exportData : attivato da una richiesta HTTP.

Implementare un trigger clearData

Per attivare un evento clearData , è necessario utilizzare un metodo da Authentication. Se non l'hai ancora fatto, aggiungi l'Autenticazione alla tua app: piattaforme Apple , Android o web .

Quindi, aggiungi un modo per richiamare il metodo delete dell'SDK di autenticazione per la tua piattaforma:

iOS+

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

Androide

FirebaseAuth.getCurrentUser().delete();

ragnatela

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

Implementare un trigger exportData

Per implementare un trigger exportData , aggiungi un pulsante o un collegamento alla tua app che richiami la funzione tramite una richiesta HTTP. Scopri di più sulla chiamata di funzioni su HTTP in Chiama funzioni tramite richieste HTTP .

Dettagli richiesta:

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

Richiama la funzione direttamente in Firebase Hosting

Se la tua app è un'app Web ospitata su Firebase Hosting, puoi richiamare la funzione clearData tramite una voce rewrite nel file firebase.json del sito:

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

Proteggi i dati exportData con regole di archiviazione

Per mantenere privati ​​i dati esportati dei tuoi utenti, aggiungi regole Cloud Storage che limitano l'accesso all'utente esportatore.

  1. Visita Archiviazione nella console Firebase .
  2. Apri la scheda Regole .
  3. Incolla la seguente regola, quindi fai clic su Pubblica :
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...
  }
}