Effacer et exporter les données de l'utilisateur final

Pour vous aider à aider vos utilisateurs à contrôler leurs données, l'équipe Firebase a créé une bibliothèque qui simplifie deux processus de données utilisateur courants :

  • clearData : supprime les données d'un utilisateur de services Firebase spécifiques (actuellement base de données en temps réel, Firestore et stockage) lorsqu'il supprime son compte via l'authentification Firebase.

  • exportData : enregistre une copie des données d'un utilisateur à partir des services Firebase dans une chaîne JSON et la télécharge sur Cloud Storage afin qu'il puisse facilement la télécharger pour lui-même.

Continuez à lire pour savoir comment ajouter les fonctions à votre application, ou accédez directement au code du dépôt GitHub de confidentialité des utilisateurs Firebase .

Ajoutez clearData ou exportData à votre application

Les fonctions clearData et exportData de la bibliothèque sont implémentées en tant que fonctions Cloud qui fonctionnent sur les données de Realtime Database, Cloud Storage et Cloud Firestore. L'ajout des fonctions dans votre propre application est un processus en trois étapes :

  1. Modifiez le fichier user_privacy.json de la bibliothèque pour refléter le schéma de base de données en temps réel, Cloud Firestore et Cloud Storage de votre application.
  2. Déployez clearData et exportData en tant que fonctions Cloud.
  3. Implémentez des déclencheurs pour les fonctions de votre application.
  4. Sécurisez les données clearData avec des règles de stockage.

Modifier le fichier user_privacy.json de la bibliothèque

Pour commencer, clonez ou téléchargez le dépôt GitHub de confidentialité des utilisateurs Firebase .

Lorsque vous avez fait cela, ouvrez functions/user_privacy.json dans un éditeur de texte. Le fichier json comporte une série de chemins personnalisables que les fonctions clearData et exportData utilisent pour rechercher les données de votre application dans Realtime Database, Cloud Firestore et Cloud Storage. Si votre application n'utilise qu'un ou deux de ces services, commencez par supprimer les objets JSON associés aux services inutilisés.

Une fois les objets supprimés, vous pouvez commencer à remplacer les valeurs d'espace réservé des services restants par les structures de données réelles utilisées par votre application.

Ajouter des chemins de base de données en temps réel aux données utilisateur

Pour personnaliser user_privacy.json pour l'instance de base de données en temps réel de votre application, remplacez la liste des chaînes d'espace réservé sous "database" par les chemins réels vers les données utilisateur :

...
  "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 vous souhaitez ajouter uniquement une des fonctions à votre application, vous pouvez supprimer l'objet de l'autre fonction, au lieu de le remplir avec vos données.

Ajouter des objets Cloud Firestore contenant des données utilisateur

Pour personnaliser user_privacy.json pour l'instance Cloud Firestore de votre application, remplacez la liste des objets réservés sous "firestore" par les objets Cloud Firestore réels contenant les données utilisateur :

...
  "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 vous souhaitez ajouter uniquement une des fonctions à votre application, vous pouvez supprimer l'objet de l'autre fonction, au lieu de le remplir avec vos données.

Ajoutez le bucket Cloud Storage et le nom du fichier avec les données utilisateur

Pour personnaliser user_privacy.json pour l'instance Cloud Storage de votre application, remplacez l'espace réservé du bucket de stockage et le nom du fichier sous "storage" par les valeurs réelles :

...
  "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 vous souhaitez ajouter uniquement une des fonctions à votre application, vous pouvez supprimer l'objet de l'autre fonction, au lieu de le remplir avec vos données.

Déployer clearData et exportData en tant que fonctions Cloud

Si vous n'êtes pas encore familier avec Cloud Functions, découvrez comment les utiliser dans le guide de démarrage de Cloud Functions .

Une fois que vous êtes à l'aise avec Cloud Functions, ajoutez les fonctions clearData et exportData à votre projet :

  1. Copiez votre user_data.json personnalisé dans votre répertoire functions .
  2. Copiez le code de index.js de la bibliothèque de confidentialité des utilisateurs vers index.js de votre projet.
    • Si vous n'utilisez pas clearData , omettez les fonctions clearData , clearDatabaseData , clearFirestoreData et clearStorageData .
    • Si vous n'utilisez pas exportData , omettez les fonctions exportData , exportDatabaseData , exportFirestoreData et exportStorageData .
  3. Déployez vos fonctions.

Implémenter des déclencheurs pour clearData et exportData

Chaque fonction nécessite un déclencheur différent :

  • clearData : déclenché lorsqu'un utilisateur supprime son compte via l'authentification.
  • exportData : déclenché par une requête HTTP.

Implémenter un déclencheur clearData

Pour déclencher un événement clearData , vous devez utiliser une méthode d'authentification. Si vous ne l'avez pas encore fait, ajoutez l'authentification à votre application : plateformes Apple , Android ou web .

Ensuite, ajoutez un moyen d'invoquer la méthode delete du SDK d'authentification pour votre plate-forme :

iOS+

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

Android

FirebaseAuth.getCurrentUser().delete();

la toile

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

Implémenter un déclencheur exportData

Pour implémenter un déclencheur exportData , ajoutez un bouton ou un lien vers votre application qui appelle la fonction via une requête HTTP. En savoir plus sur l'appel de fonctions via HTTP dans Appeler des fonctions via des requêtes HTTP .

Détails de la demande:

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

Appelez la fonction directement dans Firebase Hosting

Si votre application est une application Web hébergée sur Firebase Hosting, vous pouvez appeler votre fonction clearData via une entrée rewrite dans le fichier firebase.json du site :

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

Sécurisez les données exportData avec des règles de stockage

Pour préserver la confidentialité des données exportées par vos utilisateurs, ajoutez des règles Cloud Storage qui restreignent l'accès à l'utilisateur qui exporte.

  1. Visitez Stockage dans la console Firebase .
  2. Ouvrez l'onglet Règles .
  3. Collez la règle suivante, puis cliquez sur Publier :
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...
  }
}