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:

FirebaseAuth.User.delete { error in
 
if let error = error {
   
print("Error deleting user: \(error)")
 
}
}
FirebaseAuth.getCurrentUser().delete();
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:

FirebaseAuth.User.delete { error in
 
if let error = error {
   
print("Error deleting user: \(error)")
 
}
}
FirebaseAuth.getCurrentUser().delete();
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...
 
}
}