Limpar e exportar dados do usuário final

Para ajudar você no suporte aos usuários em relação ao controle de dados, a equipe do Firebase criou uma biblioteca que simplifica dois processos comuns relacionados aos dados do usuário:

  • clearData: exclui os dados de um usuário de serviços específicos do Firebase (atualmente, Realtime Database, Firestore e Storage) quando eles excluem suas contas por meio do Firebase Authentication.

  • exportData: salva uma cópia dos dados de um usuário dos serviços do Firebase em uma string JSON e faz o upload dela para o Cloud Storage. Assim, o usuário pode fazer o download dos dados de maneira fácil.

Continue lendo para descobrir como adicionar as funções ao app ou acesse o código diretamente no repositório do GitHub para a privacidade do usuário do Firebase.

Adicione clearData ou exportData ao app

As funções clearData e exportData na biblioteca são implementadas como funções do Cloud que operam em dados do Realtime Database, Cloud Storage e Cloud Firestore. É preciso concluir quatro etapas para adicionar as funções no seu próprio app:

  1. Edite o arquivo user_privacy.json da biblioteca para refletir os esquemas do Realtime Database, Cloud Firestore e Cloud Storage do seu app.
  2. Implante clearData e exportData como funções do Cloud.
  3. Implemente acionadores para as funções no seu app.
  4. Proteja os dados de clearData com regras de armazenamento.

Editar o arquivo user_privacy.json da biblioteca

Para começar, clone ou faça o download do repositório do GitHub para privacidade do usuário do Firebase.

Depois disso, abra functions/user_privacy.json em um editor de texto. O arquivo JSON tem uma série de caminhos personalizáveis que as funções clearData e exportData usam para encontrar os dados do app no Realtime Database, Cloud Firestore e Cloud Storage. Se o app usar apenas um ou dois desses serviços, primeiro exclua os objetos JSON associados aos serviços não utilizados.

Após remover os objetos, você pode substituir os valores de marcadores dos serviços restantes pelas estruturas de dados reais usadas pelo seu app.

Adicionar caminhos do Realtime Database aos dados do usuário

Para personalizar o user_privacy.json da instância do Realtime Database do seu app, substitua a lista de strings de marcadores em "database" por caminhos reais para os dados do usuário:

...
  "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 você quiser adicionar apenas uma das funções ao seu app, exclua o objeto da outra função, em vez de preenchê-lo com seus dados.

Adicionar objetos do Cloud Firestore que contêm dados do usuário

Para personalizar user_privacy.json para a instância do Cloud Firestore do seu app, substitua a lista de objetos de marcadores em "firestore" por objetos reais do Cloud Firestore que contêm dados do usuário:

...
  "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 você quiser adicionar apenas uma das funções ao seu app, exclua o objeto da outra função, em vez de preenchê-lo com seus dados.

Adicionar o bucket do Cloud Storage e o nome do arquivo aos dados do usuário

Para personalizar o user_privacy.json para a instância do Cloud Storage do seu app, substitua o bucket de armazenamento temporário e o nome do arquivo em "storage" pelos valores reais:

...
  "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 você quiser adicionar apenas uma das funções ao seu app, exclua o objeto da outra função, em vez de preenchê-lo com seus dados.

Implantar clearData e exportData como funções do Cloud

Se você ainda não conhece o Cloud Functions, leia mais sobre como usá-lo no Guia de iniciação do Cloud Functions.

Quando estiver familiarizado com o Cloud Functions, adicione as funções clearData e exportData ao seu projeto:

  1. Copie o user_data.json personalizado para o diretório functions.
  2. Copie o código do index.js da biblioteca de privacidade do usuário para o index.js do seu projeto.
    • Se você não estiver usando clearData, omita as funções clearData, clearDatabaseData, clearFirestoreData e clearStorageData.
    • Se você não estiver usando exportData, omita as funções exportData, exportDatabaseData, exportFirestoreData e exportStorageData.
  3. Implante suas funções.

Implementar acionadores para clearData e exportData

Cada função requer um acionador diferente:

  • clearData: acionado quando um usuário exclui a própria conta com o Authentication.
  • exportData: acionado por uma solicitação HTTP.

Implementar um acionador clearData

Para acionar um evento clearData, você precisa usar um método do Firebase Authentication. Caso não tenha feito isso ainda, adicione o Authentication ao app: plataformas da Apple, Android ou Web.

Em seguida, adicione uma função para chamar o método delete do SDK do Authentication de acordo com sua 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();
  }
});

Implementar um acionador exportData

Para implementar um acionador exportData, adicione um botão ou link ao seu app que chame a função por meio de uma solicitação HTTP. Saiba mais na página Chamar funções por meio de solicitações HTTP.

Detalhes da solicitação:

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

Invocar a função diretamente no Firebase Hosting

Se o app for um app da Web hospedado no Firebase Hosting, será possível invocar sua função clearData por meio de uma entrada rewrite no arquivo firebase.json do site:

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

Proteger dados exportData com regras de armazenamento

Para manter a privacidade dos dados exportados dos seus usuários, adicione regras do Cloud Storage que restrinjam o acesso apenas ao usuário responsável pela exportação.

  1. Acesse Storage no Console do Firebase.
  2. Abra a guia Regras.
  3. Cole a seguinte regra e clique em 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...
  }
}