Limpar e exportar dados do usuário final

Para ajudar você a ajudar seus usuários a controlar os dados, a equipe do Firebase criou uma biblioteca que simplifica dois processos comuns de dados de usuários:

  • 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 upload deles no Cloud Storage para que eles possam fazer download deles facilmente.

Continue lendo para descobrir como adicionar as funções ao seu aplicativo ou vá direto para o código no repositório GitHub de privacidade do usuário do Firebase .

Adicione clearData ou exportData ao seu aplicativo

As funções clearData e exportData na biblioteca são implementadas como Cloud Functions que operam em dados no Realtime Database, Cloud Storage e Cloud Firestore. Adicionar as funções em seu próprio aplicativo é um processo de três etapas:

  1. Edite o arquivo user_privacy.json da biblioteca para refletir o esquema do Realtime Database, do Cloud Firestore e do Cloud Storage do seu aplicativo.
  2. Implante clearData e exportData como Cloud Functions.
  3. Implemente gatilhos para as funções em seu aplicativo.
  4. Proteja dados clearData com regras de armazenamento.

Edite o arquivo user_privacy.json da biblioteca

Para começar, clone ou baixe o repositório GitHub de privacidade do usuário do Firebase .

Depois de fazer isso, 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 seu aplicativo no Realtime Database, Cloud Firestore e Cloud Storage. Se seu aplicativo usar apenas um ou dois desses serviços, comece excluindo os objetos JSON associados aos serviços não utilizados.

Sem os objetos, você pode começar a substituir os valores de espaço reservado dos serviços restantes pelas estruturas de dados reais que seu aplicativo usa.

Adicionar caminhos do Realtime Database aos dados do usuário

Para personalizar user_privacy.json para a instância do Realtime Database do seu aplicativo, substitua a lista de strings de espaço reservado em "database" pelos 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 quiser adicionar apenas uma das funções ao seu aplicativo, você pode excluir 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 para a instância do Cloud Firestore do seu aplicativo, substitua a lista de objetos de espaço reservado em "firestore" por objetos reais do Cloud Firestore contendo 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 quiser adicionar apenas uma das funções ao seu aplicativo, você pode excluir o objeto da outra função, em vez de preenchê-lo com seus dados.

Adicione o bucket do Cloud Storage e o nome do arquivo com os dados do usuário

Para personalizar user_privacy.json para a instância do Cloud Storage do seu aplicativo, substitua o intervalo de armazenamento do espaço reservado 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 quiser adicionar apenas uma das funções ao seu aplicativo, você pode excluir 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 está familiarizado com o Cloud Functions, leia 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:

  1. Copie seu user_data.json customizado para seu 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 gatilhos para clearData e exportData

Cada função requer um gatilho diferente:

  • clearData : acionado quando um usuário exclui sua conta por meio de autenticação.
  • exportData : acionado por uma solicitação HTTP.

Implementar um gatilho clearData

Para acionar um evento clearData , você precisa usar um método de autenticação. Caso ainda não tenha feito isso, adicione Autenticação ao seu aplicativo: plataformas Apple , Android ou web .

Em seguida, adicione uma maneira de invocar o método delete do SDK de autenticação para sua plataforma:

iOS+

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

Android

FirebaseAuth.getCurrentUser().delete();

Rede

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 gatilho exportData

Para implementar um gatilho exportData , adicione um botão ou link ao seu aplicativo que invoque a função por meio de uma solicitação HTTP. Leia mais sobre como invocar funções por HTTP em Chamar funções por meio de solicitações HTTP .

Pedir detalhes:

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

Invoque a função diretamente no Firebase Hosting

Se seu aplicativo for um aplicativo da Web hospedado no Firebase Hosting, você poderá invocar a função clearData por meio de uma entrada rewrite no arquivo firebase.json do site:

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

Dados exportData seguros com regras de armazenamento

Para manter a privacidade dos dados exportados dos seus usuários, adicione regras do Cloud Storage que restrinjam o acesso ao usuário exportador.

  1. Visite Armazenamento 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...
  }
}

Adicione clearData ou exportData ao seu aplicativo

As funções clearData e exportData na biblioteca são implementadas como Cloud Functions que operam em dados no Realtime Database, Cloud Storage e Cloud Firestore. Adicionar as funções em seu próprio aplicativo é um processo de três etapas:

  1. Edite o arquivo user_privacy.json da biblioteca para refletir o esquema do Realtime Database, do Cloud Firestore e do Cloud Storage do seu aplicativo.
  2. Implante clearData e exportData como Cloud Functions.
  3. Implemente gatilhos para as funções em seu aplicativo.
  4. Proteja dados clearData com regras de armazenamento.

Edite o arquivo user_privacy.json da biblioteca

Para começar, clone ou baixe o repositório GitHub de privacidade do usuário do Firebase .

Depois de fazer isso, 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 seu aplicativo no Realtime Database, Cloud Firestore e Cloud Storage. Se seu aplicativo usar apenas um ou dois desses serviços, comece excluindo os objetos JSON associados aos serviços não utilizados.

Sem os objetos, você pode começar a substituir os valores de espaço reservado dos serviços restantes pelas estruturas de dados reais que seu aplicativo usa.

Adicionar caminhos do Realtime Database aos dados do usuário

Para personalizar user_privacy.json para a instância do Realtime Database do seu aplicativo, substitua a lista de strings de espaço reservado em "database" pelos 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 quiser adicionar apenas uma das funções ao seu aplicativo, você pode excluir 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 para a instância do Cloud Firestore do seu aplicativo, substitua a lista de objetos de espaço reservado em "firestore" por objetos reais do Cloud Firestore contendo 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 quiser adicionar apenas uma das funções ao seu aplicativo, você pode excluir o objeto da outra função, em vez de preenchê-lo com seus dados.

Adicione o bucket do Cloud Storage e o nome do arquivo com os dados do usuário

Para personalizar user_privacy.json para a instância do Cloud Storage do seu aplicativo, substitua o intervalo de armazenamento do espaço reservado 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 quiser adicionar apenas uma das funções ao seu aplicativo, você pode excluir 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 está familiarizado com o Cloud Functions, leia 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:

  1. Copie seu user_data.json customizado para seu 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 gatilhos para clearData e exportData

Cada função requer um gatilho diferente:

  • clearData : acionado quando um usuário exclui sua conta por meio de autenticação.
  • exportData : acionado por uma solicitação HTTP.

Implementar um gatilho clearData

Para acionar um evento clearData , você precisa usar um método de autenticação. Caso ainda não tenha feito isso, adicione Autenticação ao seu aplicativo: plataformas Apple , Android ou web .

Em seguida, adicione uma maneira de invocar o método delete do SDK de autenticação para sua plataforma:

iOS+

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

Android

FirebaseAuth.getCurrentUser().delete();

Rede

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 gatilho exportData

Para implementar um gatilho exportData , adicione um botão ou link ao seu aplicativo que invoque a função por meio de uma solicitação HTTP. Leia mais sobre como invocar funções por HTTP em Chamar funções por meio de solicitações HTTP .

Pedir detalhes:

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

Invoque a função diretamente no Firebase Hosting

Se seu aplicativo for um aplicativo da Web hospedado no Firebase Hosting, você poderá invocar a função clearData por meio de uma entrada rewrite no arquivo firebase.json do site:

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

Dados exportData seguros com regras de armazenamento

Para manter a privacidade dos dados exportados dos seus usuários, adicione regras do Cloud Storage que restrinjam o acesso ao usuário exportador.

  1. Visite Armazenamento 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...
  }
}