Menghapus dan mengekspor data pengguna akhir

Agar Anda dapat membantu pengguna mengontrol data mereka, tim Firebase telah membuat library untuk menyederhanakan dua proses data pengguna umum:

  • clearData: menghapus data pengguna dari layanan Firebase tertentu (saat ini Realtime Database, Firestore, dan Storage) saat pengguna tersebut menghapus akunnya melalui Firebase Authentication.

  • exportData: menyimpan salinan data pengguna dari layanan Firebase ke string JSON, dan menguploadnya ke Cloud Storage sehingga pengguna tersebut dapat dengan mudah mendownloadnya sendiri.

Lanjutkan membaca artikel ini untuk mengetahui cara menambahkan fungsi ke aplikasi Anda, atau langsung lihat kodenya di repo GitHub privasi pengguna Firebase.

Menambahkan clearData atau exportData ke aplikasi Anda

Fungsi clearData dan exportData di library diimplementasikan sebagai Cloud Functions yang beroperasi pada data di dalam Realtime Database, Cloud Storage, dan Cloud Firestore. Proses untuk menambahkan fungsi di aplikasi Anda terdiri dari tiga langkah:

  1. Edit file user_privacy.json library agar sesuai dengan skema Realtime Database, Cloud Firestore, dan Cloud Storage aplikasi Anda.
  2. Deploy clearData dan exportData sebagai Cloud Functions.
  3. Implementasikan pemicu fungsi tersebut di aplikasi Anda.
  4. Amankan data clearData dengan aturan penyimpanan.

Mengedit file user_privacy.json library

Untuk memulai, clone atau download repo GitHub privasi pengguna Firebase.

Setelah selesai melakukannya, buka functions/user_privacy.json di editor teks. File json memiliki serangkaian jalur yang dapat disesuaikan dan digunakan oleh fungsi clearData dan exportData untuk menemukan data aplikasi Anda di Realtime Database, Cloud Firestore, dan Cloud Storage. Jika aplikasi Anda hanya menggunakan satu atau dua dari layanan tersebut, mulailah dengan menghapus objek JSON yang terkait dengan layanan yang tidak digunakan.

Setelah objek dihapus, Anda bisa mulai mengganti nilai placeholder layanan yang tersisa dengan struktur data sebenarnya yang digunakan aplikasi Anda.

Menambahkan jalur Realtime Database ke data pengguna

Guna menyesuaikan user_privacy.json untuk instance Realtime Database aplikasi Anda, ganti daftar string placeholder di "database" dengan jalur sebenarnya ke data pengguna:

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

Jika hanya ingin menambahkan salah satu fungsi ke aplikasi, Anda dapat menghapus objek fungsi lain, daripada mengisinya dengan data.

Menambahkan objek Cloud Firestore yang berisi data pengguna

Guna menyesuaikan user_privacy.json untuk instance Cloud Firestore aplikasi, ganti daftar objek placeholder di "firestore" dengan objek Cloud Firestore sebenarnya yang berisi data pengguna:

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

Jika hanya ingin menambahkan salah satu fungsi ke aplikasi, Anda dapat menghapus objek fungsi lain, daripada mengisinya dengan data.

Menambahkan bucket Cloud Storage dan nama file dengan data pengguna

Guna menyesuaikan user_privacy.json untuk instance Cloud Storage aplikasi, ganti bucket penyimpanan placeholder dan nama file di "storage" dengan nilai sebenarnya:

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

Jika hanya ingin menambahkan salah satu fungsi ke aplikasi, Anda dapat menghapus objek fungsi lain, daripada mengisinya dengan data.

Men-deploy clearData dan exportData sebagai Cloud Functions

Jika Anda belum memahami Cloud Functions, baca cara menggunakannya dalam Panduan Memulai Cloud Functions.

Setelah Anda familier dengan Cloud Functions, tambahkan fungsi clearData dan exportData ke project Anda:

  1. Salin user_data.json yang sudah disesuaikan ke direktori functions Anda.
  2. Salin kode dari index.js library privasi pengguna ke index.js project Anda.
    • Jika Anda tidak menggunakan clearData, hapus fungsi clearData, clearDatabaseData, clearFirestoreData, dan clearStorageData.
    • Jika Anda tidak menggunakan exportData, hapus fungsi exportData, exportDatabaseData, exportFirestoreData, dan exportStorageData.
  3. Deploy fungsi Anda.

Mengimplementasikan pemicu untuk clearData dan exportData

Setiap fungsi memerlukan pemicu yang berbeda:

  • clearData: dipicu saat pengguna menghapus akunnya melalui Authentication.
  • exportData: dipicu oleh permintaan HTTP.

Mengimplementasikan pemicu clearData

Untuk memicu peristiwa clearData, Anda perlu menggunakan metode dari Authentication. Jika Anda belum melakukannya, tambahkan Authentication ke aplikasi Anda: platform Apple, Android, atau web.

Kemudian, tambahkan cara untuk memanggil metode delete Authentication SDK untuk platform Anda:

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

Mengimplementasikan pemicu exportData

Untuk mengimplementasikan pemicu exportData, tambahkan tombol atau link ke aplikasi Anda yang memanggil fungsi melalui permintaan HTTP. Baca informasi selengkapnya mengenai cara mengaktifkan fungsi melalui HTTP di Memanggil fungsi melalui permintaan HTTP.

Detail permintaan:

  • Jenis: POST
  • URL: https://us-central1-<var>PROJECT-ID<.var>.cloudfunctions.net/exportData
  • Isi: <var>CURRENT_USER'S_UID</var>

Memanggil fungsi secara langsung di Firebase Hosting

Jika aplikasi Anda berupa aplikasi web yang dihosting di Firebase Hosting, Anda dapat memanggil fungsi clearData melalui entri rewrite di file firebase.json situs tersebut:

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

Mengamankan data exportData dengan aturan penyimpanan

Untuk menjaga kerahasiaan data pengguna yang diekspor, tambahkan aturan Cloud Storage yang membatasi akses ke pengguna pengekspor.

  1. Buka Storage di Firebase console.
  2. Buka tab Rules.
  3. Tempel aturan berikut, lalu klik Publish:
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...
  }
}