Adicionar funções para limpar e exportar dados do usuário

Para ajudar você no suporte aos usuários com 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 contidos nos serviços do Firebase em uma string JSON e faz o upload dela para o Cloud Storage. Dessa forma, o usuário pode fazer o download dos dados de maneira fácil.

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

Adicionar clearData ou exportData ao seu app

As funções clearData e exportData na biblioteca são implementadas como funções do Google Cloud que operam em tempo real nos 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 o esquema do Realtime Database, Cloud Firestore e Cloud Storage do seu app.
  2. Implemente clearData e exportData como funções do Google Cloud.
  3. Implemente acionadores para as funções no seu app.
  4. Proteja os dados 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 seu 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 dos espaços reservados dos serviços restantes pelas estruturas de dados reais usados 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 dos espaços reservados em "database" pelos caminhos reais dos 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 contendo dados do usuário

Para personalizar user_privacy.json da instância do Cloud Firestore do seu app, substitua a lista de objetos de espaços reservados em "firestore" pelos 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 intervalo do Cloud Storage e o nome do arquivo aos dados do usuário

Para personalizar o user_privacy.json da instância do Cloud Storage do seu app, substitua o intervalo de armazenamento de espaços reservados 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 Google Cloud

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

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

  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 seuprojeto.
    • 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 conta dele por meio do 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, adicione o Authentication ao seu app para iOS, Android ou da 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 de 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 seu aplicativo for um app da Web hospedado no Firebase Hosting, você poderá invocar sua função clearData por meio de uma entrada de 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...
  }
}