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:
- Edite o arquivo
user_privacy.json
da biblioteca para refletir os esquemas do Realtime Database, Cloud Firestore e Cloud Storage do seu app. - Implante
clearData
eexportData
como funções do Cloud. - Implemente acionadores para as funções no seu app.
- 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:
- Copie o
user_data.json
personalizado para o diretóriofunctions
. - Copie o código do
index.js
da biblioteca de privacidade do usuário para oindex.js
do seu projeto.- Se você não estiver usando
clearData
, omita as funçõesclearData
,clearDatabaseData
,clearFirestoreData
eclearStorageData
. - Se você não estiver usando
exportData
, omita as funçõesexportData
,exportDatabaseData
,exportFirestoreData
eexportStorageData
.
- Se você não estiver usando
- 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.
- Acesse Storage no Console do Firebase.
- Abra a guia Regras.
- 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... } }