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:
- Edite o arquivo
user_privacy.json
da biblioteca para refletir o esquema Realtime Database, Cloud Firestore e Cloud Storage do app. - Implante
clearData
eexportData
como Cloud Functions. - 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 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:
- 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 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.
- Acesse o 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... } }