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:
- 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. - Implante
clearData
eexportData
como Cloud Functions. - Implemente gatilhos para as funções em seu aplicativo.
- 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:
- Copie seu
user_data.json
customizado para seu 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 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.
- Visite Armazenamento 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... } }
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:
- 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. - Implante
clearData
eexportData
como Cloud Functions. - Implemente gatilhos para as funções em seu aplicativo.
- 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:
- Copie seu
user_data.json
customizado para seu 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 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.
- Visite Armazenamento 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... } }