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 string 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 opciones de Cloud Functions que se aplican sobre 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 de 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 contiene 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 strings 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 reales de Cloud Firestore 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 todavía no conoces Cloud Functions, investiga la forma de utilizar esas funciones en la guía de introducción de Cloud Functions.
Cuando ya estés familiarizado con Cloud Functions, agrega las funciones clearData
y exportData
al proyecto de la siguiente manera:
- 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 mediante 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 para 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 aplicación 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... } }