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 ele exclui sua conta 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 com facilidade.

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 Cloud Functions que operam em dados em 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 o esquema Realtime Database, Cloud Firestore e Cloud Storage do app.
  2. Implante clearData e exportData como Cloud Functions.
  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 em 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 user_privacy.json da instância Realtime Database do seu app, substitua a lista de strings marcadoras de posição 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 Cloud Firestore que contêm dados do usuário

Para personalizar o user_privacy.json da instância Cloud Firestore do seu app, substitua a lista de objetos marcadores de posição em "firestore" por objetos Cloud Firestore reais 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 com os dados do usuário

Para personalizar o user_privacy.json para a instância Cloud Storage do seu app, substitua o bucket de armazenamento marcador de posição 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 Cloud Functions

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 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 Authentication. Caso não tenha feito isso ainda, adicione o Authentication ao app: plataformas da Apple, Android ou Web.

Em seguida, adicione uma forma de invocar o método delete do SDK do Authentication para sua plataforma:

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

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 usuários, adicione regras do Cloud Storage que restrinjam o acesso apenas ao usuário responsável pela exportação.

  1. Acesse o 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...
  }
}