清除並匯出最終用戶數據

為了幫助您的使用者控制他們的數據,Firebase 團隊創建了一個庫來簡化兩個常見的使用者資料流程:

  • clearData :當使用者透過 Firebase 驗證刪除其帳戶時,從特定 Firebase 服務(目前為即時資料庫、Firestore 和儲存)中刪除使用者的資料。

  • exportData :將 Firebase 服務中的使用者資料副本儲存到 JSON 字串,並將其上傳到 Cloud Storage,以便使用者可以輕鬆地自行下載。

繼續閱讀以了解如何將功能新增至您的應用程式中,或直接跳到Firebase 使用者隱私 GitHub 儲存庫中的程式碼。

clearDataexportData新增至您的應用程式

庫中的clearDataexportData函數以雲端函數實現,對即時資料庫、Cloud Storage 和Cloud Firestore 中的資料進行操作。在您自己的應用程式中新增功能分為三個步驟:

  1. 編輯庫的user_privacy.json檔案以反映應用的即時資料庫、Cloud Firestore 和 Cloud Storage 架構。
  2. clearDataexportData部署為雲端功能。
  3. 為應用程式中的功能實作觸發器。
  4. 使用儲存規則保護clearData資料。

編輯庫的user_privacy.json文件

首先,複製或下載Firebase 使用者隱私 GitHub 儲存庫

完成後,在文字編輯器中開啟functions/user_privacy.json 。 json 檔案具有一系列可自訂的路徑, clearDataexportData函數使用這些路徑在即時資料庫、Cloud Firestore 和 Cloud Storage 中尋找應用程式的資料。如果您的應用程式僅使用其中一兩個服務,請先刪除與未使用的服務關聯的 JSON 物件。

物件消失後,您可以開始將剩餘服務的佔位符值替換為應用程式使用的實際資料結構。

將即時資料庫路徑新增至使用者數據

若要為應用程式的即時資料庫執行個體自訂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,請將clearDataexportData函數添加到您的專案中:

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

實作clearDataexportData的觸發器

每個功能都需要不同的觸發器:

  • clearData :當使用者透過驗證刪除帳戶時觸發。
  • exportData :由 HTTP 請求觸發。

實作clearData觸發器

若要觸發clearData事件,您需要使用驗證中的方法。如果您還沒有這樣做,請將身份驗證新增至您的應用程式: Apple 平台Androidweb

然後,新增一種方法來為您的平台呼叫 Authentication SDK 的delete方法:

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 上的 Web 應用,您可以透過網站的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...
  }
}

clearDataexportData新增至您的應用程式

庫中的clearDataexportData函數以雲端函數實現,對即時資料庫、Cloud Storage 和Cloud Firestore 中的資料進行操作。在您自己的應用程式中新增功能分為三個步驟:

  1. 編輯庫的user_privacy.json檔案以反映應用的即時資料庫、Cloud Firestore 和 Cloud Storage 架構。
  2. clearDataexportData部署為雲端功能。
  3. 為應用程式中的功能實作觸發器。
  4. 使用儲存規則保護clearData資料。

編輯庫的user_privacy.json文件

首先,複製或下載Firebase 使用者隱私 GitHub 儲存庫

完成後,在文字編輯器中開啟functions/user_privacy.json 。 json 檔案具有一系列可自訂的路徑, clearDataexportData函數使用這些路徑在即時資料庫、Cloud Firestore 和 Cloud Storage 中尋找應用程式的資料。如果您的應用程式僅使用其中一兩個服務,請先刪除與未使用的服務關聯的 JSON 物件。

物件消失後,您可以開始將剩餘服務的佔位符值替換為應用程式使用的實際資料結構。

將即時資料庫路徑新增至使用者數據

若要為應用程式的即時資料庫執行個體自訂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,請將clearDataexportData函數添加到您的專案中:

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

實作clearDataexportData的觸發器

每個功能都需要不同的觸發器:

  • clearData :當使用者透過驗證刪除帳戶時觸發。
  • exportData :由 HTTP 請求觸發。

實作clearData觸發器

若要觸發clearData事件,您需要使用驗證中的方法。如果您還沒有這樣做,請將身份驗證新增至您的應用程式: Apple 平台Androidweb

然後,新增一種方法來為您的平台呼叫 Authentication SDK 的delete方法:

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 上的 Web 應用,您可以透過網站的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...
  }
}