Очистка и экспорт данных конечных пользователей

Чтобы помочь вам помочь вашим пользователям контролировать свои данные, команда Firebase создала библиотеку, которая упрощает два распространенных процесса обработки пользовательских данных:

  • clearData : удаляет данные пользователя из определенных сервисов Firebase (в настоящее время базы данных Realtime, Firestore и Storage), когда они удаляют свою учетную запись через Firebase Authentication .

  • exportData : сохраняет копию данных пользователя из сервисов Firebase в строку JSON и загружает ее в Cloud Storage , чтобы они могли легко загрузить ее для себя.

Продолжайте читать, чтобы узнать, как добавить функции в ваше приложение, или сразу переходите к коду в репозитории конфиденциальности пользователей Firebase на GitHub .

Добавьте clearData или exportData в свое приложение.

clearData exportData в библиотеке реализованы как Cloud Functions , которые работают с данными в Realtime Database , Cloud Storage и Cloud Firestore . Добавление функций в ваше собственное приложение представляет собой трехэтапный процесс:

  1. Отредактируйте файл user_privacy.json библиотеки, чтобы отразить схему Realtime Database , Cloud Firestore и Cloud Storage вашего приложения.
  2. Разверните clearData и exportData как Cloud Functions .
  3. Реализуйте триггеры для функций в вашем приложении.
  4. Защитите данные clearData с помощью правил хранения.

Отредактируйте файл user_privacy.json библиотеки.

Для начала клонируйте или загрузите репозиторий конфиденциальности пользователей Firebase на GitHub .

Сделав это, откройте functions/user_privacy.json в текстовом редакторе. Файл json имеет ряд настраиваемых путей, которые функции clearData и exportData используют для поиска данных вашего приложения в Realtime Database , Cloud Firestore и Cloud Storage . Если ваше приложение использует только одну или две из этих служб, начните с удаления объектов JSON, связанных с неиспользуемыми службами.

Удалив объекты, вы можете начать заменять значения заполнителей оставшихся служб фактическими структурами данных, которые использует ваше приложение.

Добавление путей Realtime Database к пользовательским данным

Чтобы настроить user_privacy.json для экземпляра Realtime Database вашего приложения, замените список строк-заполнителей в разделе "database" фактическими путями к пользовательским данным:

...
  "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
    ]
  },
...

Если вы хотите добавить в приложение только одну функцию, вы можете удалить объект другой функции вместо того, чтобы заполнять его своими данными.

Добавьте объекты Cloud Firestore , содержащие пользовательские данные.

Чтобы настроить user_privacy.json для экземпляра Cloud Firestore вашего приложения, замените список объектов-заполнителей в разделе "firestore" реальными объектами Cloud Firestore , содержащими пользовательские данные:

...
  "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
    ]
  },
...

Если вы хотите добавить в приложение только одну функцию, вы можете удалить объект другой функции вместо того, чтобы заполнять его своими данными.

Добавьте сегмент Cloud Storage и имя файла с пользовательскими данными.

Чтобы настроить user_privacy.json для экземпляра Cloud Storage вашего приложения, замените заполнитель хранилища и имя файла в разделе "storage" фактическими значениями:

...
  "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"]
    ]
  },
...

Если вы хотите добавить в приложение только одну функцию, вы можете удалить объект другой функции вместо того, чтобы заполнять его своими данными.

Развертывание clearData и exportData как Cloud Functions

Если вы еще не знакомы с Cloud Functions , прочитайте, как их использовать, в руководстве по началу работы Cloud Functions .

Как только вы освоитесь с Cloud Functions , добавьте в свой проект clearData exportData :

  1. Скопируйте настроенный user_data.json в каталог functions .
  2. Скопируйте код из index.js библиотеки конфиденциальности пользователя в index.js вашего проекта.
    • Если вы не clearData , опустите clearData , clearDatabaseData , clearFirestoreData clearStorageData .
    • Если вы не используете exportData , опустите функции exportData , exportDatabaseData , exportFirestoreData и exportStorageData .
  3. Разверните свои функции.

Реализация триггеров для clearData и exportData

Для каждой функции требуется отдельный триггер:

  • clearData : срабатывает, когда пользователь удаляет свою учетную запись посредством Authentication .
  • exportData : запускается HTTP-запросом.

Реализация триггера clearData

Чтобы вызвать событие clearData , вам нужно использовать метод из Authentication . Если вы еще этого не сделали, добавьте Authentication в свое приложение: платформы Apple , Android или веб-версия .

Затем добавьте способ вызова метода delete Authentication SDK для вашей платформы:

iOS+

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();
  }
});

Реализация триггера exportData

Чтобы реализовать триггер exportData , добавьте в свое приложение кнопку или ссылку, которая вызывает функцию через HTTP-запрос. Подробнее о вызове функций через HTTP читайте в разделе Вызов функций через HTTP-запросы .

Подробности запроса:

  • Тип: POST
  • URL-адрес: https://us-central1-<var>PROJECT-ID<.var>.cloudfunctions.net/exportData
  • Тело: <var>CURRENT_USER'S_UID</var>

Вызовите функцию непосредственно на Firebase Hosting

Если ваше приложение представляет собой веб-приложение, размещенное на Firebase Hosting , вы можете вызвать clearData , rewrite запись в файле firebase.json сайта:

  "hosting": {
    "rewrites": [
       {"source": "/exportData", "function": "exportData"}
    ]
  }

Защита данных exportData с помощью правил хранения

Чтобы сохранить конфиденциальность экспортированных данных ваших пользователей, добавьте правила Cloud Storage , которые ограничивают доступ экспортирующему пользователю.

  1. Посетите Storage в консоли Firebase .
  2. Откройте вкладку «Правила» .
  3. Вставьте следующее правило и нажмите «Опубликовать» :
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...
  }
}