清除及匯出使用者資料

為協助您的使用者控管自己的資料,Firebase 團隊建立了程式庫來簡化兩種常見的使用者資料處理程序:

  • clearData:從特定 Firebase 服務刪除使用者資料 (目前 即時資料庫、Firestore 和 Storage)。 至 Firebase Authentication

  • exportData:將使用者的資料從 Firebase 服務儲存至 JSON 字串,並上傳至 Cloud Storage,方便他們自行下載。

請繼續閱讀,瞭解如何在應用程式中新增函式,或直接跳到 Firebase 使用者隱私 GitHub 存放區

在應用程式中新增 clearDataexportData

程式庫中的 clearDataexportData 函式會實作為 Cloud Functions,對 Realtime DatabaseCloud StorageCloud Firestore 中的資料執行運算。在自己的應用程式中新增函式需要三個步驟:

  1. 編輯程式庫的 user_privacy.json 檔案,反映應用程式的 Realtime DatabaseCloud FirestoreCloud Storage 結構定義。
  2. clearDataexportData 部署為 Cloud Functions
  3. 為應用程式中的函式實作觸發條件。
  4. 使用儲存空間規則保護 clearData 資料。

編輯程式庫的 user_privacy.json 檔案

如要開始使用,請複製或下載 Firebase 使用者隱私 GitHub 存放區

完成後,請在文字編輯器中開啟 functions/user_privacy.json。JSON 檔案包含一系列的自訂路徑,clearDataexportData 函式可用來尋找 Realtime DatabaseCloud FirestoreCloud Storage 中的應用程式資料。如果您的應用程式只使用其中一種服務,請先刪除與未使用服務相關聯的 JSON 物件。

物件消失之後,您就可以開始替換剩餘服務。預留位置值,藉此搭配應用程式使用的實際資料結構。

在使用者資料中新增 Realtime Database 路徑

如要針對應用程式的 Realtime Database 執行個體自訂 user_privacy.json,請將 "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 物件

如要為應用程式的 Cloud Firestore 執行個體自訂 user_privacy.json,請將 "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 值區和檔案名稱

如要為應用程式的 Cloud Storage 執行個體自訂 user_privacy.json,請將 "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"]
    ]
  },
...

如果您只想在應用程式中新增其中一個函式,可以刪除另一個函式的物件,而非填入資料。

clearDataexportData 部署為 Cloud Functions

如果您還不熟悉 Cloud Functions,請參閱 Cloud Functions 入門指南,瞭解使用方式。

熟悉 Cloud Functions 後,請在專案中新增 clearDataexportData 函式:

  1. 將自訂的 user_data.json 複製到 functions 目錄。
  2. 將使用者隱私權資料庫的 index.js 中的程式碼複製到專案的 index.js
    • 如果您未使用 clearData,請省略 clearDataclearDatabaseDataclearFirestoreDataclearStorageData 函式。
    • 如果您未使用 exportData,請省略 exportDataexportDatabaseDataexportFirestoreDataexportStorageData 函式。
  3. 部署函式。

clearDataexportData 導入觸發條件

每個函式都需要不同的觸發條件:

  • clearData:當使用者透過 Authentication 刪除自己的帳戶時觸發。
  • exportData:由 HTTP 要求觸發。

導入 clearData 觸發條件

如要觸發 clearData 事件,您必須使用 Authentication 中的方法。如果發生以下情況: 如果您尚未安裝,請將 Authentication 加入您的應用程式:Apple 平台Android網頁

然後,新增一個方法,以便在您的平台叫用 Authentication SDK 的 delete 方法:

iOS+

FirebaseAuth.User.delete { error in
  if let error = error {
    print("Error deleting user: \(error)")
  }
}

Android

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 要求呼叫函式一節。

要求詳情:

  • 類型:POST
  • 網址:https://us-central1-<var>PROJECT-ID<.var>.cloudfunctions.net/exportData
  • 內文:<var>CURRENT_USER'S_UID</var>

直接在 Firebase Hosting 中叫用函式

如果您的應用程式是代管於 Firebase Hosting 的網頁應用程式,您可以叫用 透過網站 firebase.json 檔案中的 rewrite 項目執行 clearData 函式:

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

運用儲存空間規則保護 exportData 資料

維持使用者參與度已匯出的私密資料,新增 Cloud Storage 限制匯出使用者存取權的規則

  1. 前往 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...
  }
}
敬上