Para que puedas ayudar a tus usuarios a controlar sus datos, el equipo de Firebase creó una biblioteca que simplifica dos procesos comunes de los datos del usuario:
clearData
: borra los datos de usuario de los servicios específicos de Firebase (actualmente Realtime Database, Firestore, y Storage) cuando el usuario borra su cuenta a través de Firebase Authentication.exportData
: guarda una copia de los datos de usuario de los servicios de Firebase en una cadena JSON y la sube a Cloud Storage para que el usuario pueda descargarla fácilmente.
Sigue leyendo para descubrir cómo agregar las funciones a tu app o accede directamente al código en el repositorio de GitHub de privacidad de los usuarios de Firebase.
Agrega clearData
o exportData
a tu app
Las funciones clearData
y exportData
de la biblioteca se implementan como Cloud Functions que operan en datos de Realtime Database, Cloud Storage y Cloud Firestore. Para agregar las funciones a tu propia app, debes completar un proceso de tres pasos:
- Edita el archivo
user_privacy.json
de la biblioteca para reflejar el esquema Realtime Database, Cloud Firestore y Cloud Storage de tu app. - Implementa
clearData
yexportData
como Cloud Functions. - Aplica activadores para las funciones de tu app.
- Protege los datos de
clearData
con reglas de almacenamiento.
Edita el archivo user_privacy.json
de la biblioteca
Para comenzar, clona o descarga el repositorio de GitHub de privacidad de los usuarios de Firebase.
Cuando termines, abre functions/user_privacy.json
en un editor de texto. El archivo JSON tiene una serie de rutas de acceso personalizables que las funciones clearData
y exportData
usan para buscar los datos de tu app en Realtime Database, Cloud Firestore y Cloud Storage. Si tu app solo utiliza uno o dos de esos servicios, comienza por borrar los objetos JSON asociados con los servicios sin utilizar.
Sin esos objetos, puedes comenzar a reemplazar los valores que se utilizan como marcadores de posición de los servicios restantes por las estructuras de datos reales que utiliza tu app.
Agrega rutas de acceso de Realtime Database a los datos del usuario
Para personalizar user_privacy.json
en la instancia de Realtime Database de tu app, reemplaza la lista de cadenas que se utilizan como marcadores de posición en "database"
por rutas de acceso reales a los datos del usuario:
... "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 ] }, ...
Si solo deseas agregar una de las funciones a la app, puedes borrar el objeto de la otra función, en lugar de completarlo con tus datos.
Agrega objetos de Cloud Firestore que contengan datos del usuario
Para personalizar user_privacy.json
en la instancia de Cloud Firestore de tu app, reemplaza la lista de objetos que se utilizan como marcadores de posición en "firestore"
por objetos Cloud Firestore reales que contengan datos del usuario:
... "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 ] }, ...
Si solo deseas agregar una de las funciones a la app, puedes borrar el objeto de la otra función, en lugar de completarlo con tus datos.
Agrega el nombre de archivo y el bucket de Cloud Storage con datos del usuario
Para personalizar user_privacy.json
en la instancia de Cloud Storage de tu app, reemplaza el nombre de archivo y el bucket de almacenamiento que se utilizan como marcadores de posición en "storage"
por los siguientes valores reales:
... "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"] ] }, ...
Si solo deseas agregar una de las funciones a la app, puedes borrar el objeto de la otra función, en lugar de completarlo con tus datos.
Implementa clearData
y exportData
como Cloud Functions
Si aún no conoces Cloud Functions, consulta la Guía de introducción a Cloud Functions para obtener información sobre cómo usarlo.
Cuando ya sepas cómo usar Cloud Functions, agrega las funciones clearData
y exportData
a tu proyecto:
- Copia tu
user_data.json
personalizado al directoriofunctions
. - Copia el código del
index.js
de la biblioteca de privacidad del usuario alindex.js
de tu proyecto.- Si no usas
clearData
, omite las funcionesclearData
,clearDatabaseData
,clearFirestoreData
yclearStorageData
. - Si no usas
exportData
, omite las funcionesexportData
,exportDatabaseData
,exportFirestoreData
yexportStorageData
.
- Si no usas
- Implementa tus funciones.
Implementa activadores para clearData
y exportData
Cada función requiere un activador diferente:
clearData
: se activa cuando un usuario borra su cuenta a través de Authentication.exportData
: se activa a través de una solicitud HTTP.
Implementa un activador clearData
Para activar un evento clearData
, debes utilizar un método de Authentication. Si
aún no lo has hecho, agrega Authentication a tu app: plataformas de Apple, Android o web.
A continuación, agrega una forma de invocar el método delete
del SDK de Authentication para tu 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();
}
});
Implementa un activador exportData
Para implementar un activador exportData
, agrega un botón o vínculo a tu app que invoque
la función mediante una solicitud HTTP. Obtén más información sobre la invocación de funciones
mediante HTTP en Llama a funciones mediante solicitudes HTTP.
Detalles de la solicitud:
- Tipo:
POST
- URL:
https://us-central1-<var>PROJECT-ID<.var>.cloudfunctions.net/exportData
- Cuerpo:
<var>CURRENT_USER'S_UID</var>
Invoca la función directamente en Firebase Hosting
Si tu app es una app web alojada en Firebase Hosting, puedes invocar la
función clearData
a través de una entrada rewrite
en el archivo firebase.json
del sitio:
"hosting": {
"rewrites": [
{"source": "/exportData", "function": "exportData"}
]
}
Protege los datos de exportData
con reglas de almacenamiento
Para mantener la privacidad de los datos de usuario exportados, agrega las reglas de Cloud Storage que restringen el acceso al usuario exportador.
- Ve a Almacenamiento en Firebase console.
- Abre la pestaña Reglas.
- Pega la siguiente regla y, luego, haz clic en 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... } }