為協助您的使用者控管自己的資料,Firebase 團隊建立了程式庫來簡化兩種常見的使用者資料處理程序:
clearData
:從特定 Firebase 服務刪除使用者資料 (目前 即時資料庫、Firestore 和 Storage)。 至 Firebase Authentication。exportData
:將使用者的資料從 Firebase 服務儲存至 JSON 字串,並上傳至 Cloud Storage,方便他們自行下載。
請繼續閱讀,瞭解如何在應用程式中新增函式,或直接跳到 Firebase 使用者隱私 GitHub 存放區。
在應用程式中新增 clearData
或 exportData
程式庫中的 clearData
和 exportData
函式會實作為 Cloud Functions,對 Realtime Database、Cloud Storage 和 Cloud Firestore 中的資料執行運算。在自己的應用程式中新增函式需要三個步驟:
- 編輯程式庫的
user_privacy.json
檔案,反映應用程式的 Realtime Database、Cloud Firestore 和 Cloud Storage 結構定義。 - 將
clearData
和exportData
部署為 Cloud Functions。 - 為應用程式中的函式實作觸發條件。
- 使用儲存空間規則保護
clearData
資料。
編輯程式庫的 user_privacy.json
檔案
如要開始使用,請複製或下載 Firebase 使用者隱私 GitHub 存放區。
完成後,請在文字編輯器中開啟 functions/user_privacy.json
。JSON 檔案包含一系列的自訂路徑,clearData
和 exportData
函式可用來尋找 Realtime Database、Cloud Firestore 和 Cloud 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"] ] }, ...
如果您只想在應用程式中新增其中一個函式,可以刪除另一個函式的物件,而非填入資料。
將 clearData
和 exportData
部署為 Cloud Functions
如果您還不熟悉 Cloud Functions,請參閱 Cloud Functions 入門指南,瞭解使用方式。
熟悉 Cloud Functions 後,請在專案中新增 clearData
和 exportData
函式:
- 將自訂的
user_data.json
複製到functions
目錄。 - 將使用者隱私權資料庫的
index.js
中的程式碼複製到專案的index.js
。- 如果您未使用
clearData
,請省略clearData
、clearDatabaseData
、clearFirestoreData
和clearStorageData
函式。 - 如果您未使用
exportData
,請省略exportData
、exportDatabaseData
、exportFirestoreData
和exportStorageData
函式。
- 如果您未使用
- 部署函式。
為 clearData
和 exportData
導入觸發條件
每個函式都需要不同的觸發條件:
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 限制匯出使用者存取權的規則
- 前往 Firebase 控制台的「儲存空間」。
- 開啟「規則」分頁。
- 貼上下列規則,然後按一下「發布」:
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... } }