為了幫助您的使用者控制他們的數據,Firebase 團隊創建了一個庫來簡化兩個常見的使用者資料流程:
clearData
:當使用者透過 Firebase 驗證刪除其帳戶時,從特定 Firebase 服務(目前為即時資料庫、Firestore 和儲存)中刪除使用者的資料。exportData
:將 Firebase 服務中的使用者資料副本儲存到 JSON 字串,並將其上傳到 Cloud Storage,以便使用者可以輕鬆地自行下載。
繼續閱讀以了解如何將功能新增至您的應用程式中,或直接跳到Firebase 使用者隱私 GitHub 儲存庫中的程式碼。
將clearData
或exportData
新增至您的應用程式
庫中的clearData
和exportData
函數以雲端函數實現,對即時資料庫、Cloud Storage 和Cloud Firestore 中的資料進行操作。在您自己的應用程式中新增功能分為三個步驟:
- 編輯庫的
user_privacy.json
檔案以反映應用的即時資料庫、Cloud Firestore 和 Cloud Storage 架構。 - 將
clearData
和exportData
部署為雲端功能。 - 為應用程式中的功能實作觸發器。
- 使用儲存規則保護
clearData
資料。
編輯庫的user_privacy.json
文件
首先,複製或下載Firebase 使用者隱私 GitHub 儲存庫。
完成後,在文字編輯器中開啟functions/user_privacy.json
。 json 檔案具有一系列可自訂的路徑, clearData
和exportData
函數使用這些路徑在即時資料庫、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"] ] }, ...
如果您只想將其中一個函數新增至應用程式中,則可以刪除另一個函數的對象,而不是用您的資料填入它。
將clearData
和exportData
部署為雲端功能
如果您還不熟悉 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
:當使用者透過驗證刪除帳戶時觸發。 -
exportData
:由 HTTP 請求觸發。
實作clearData
觸發器
若要觸發clearData
事件,您需要使用驗證中的方法。如果您還沒有這樣做,請將身份驗證新增至您的應用程式: Apple 平台、 Android或web 。
然後,新增一種方法來為您的平台呼叫 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 規則。
- 存取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... } }
將clearData
或exportData
新增至您的應用程式
庫中的clearData
和exportData
函數以雲端函數實現,對即時資料庫、Cloud Storage 和Cloud Firestore 中的資料進行操作。在您自己的應用程式中新增功能分為三個步驟:
- 編輯庫的
user_privacy.json
檔案以反映應用的即時資料庫、Cloud Firestore 和 Cloud Storage 架構。 - 將
clearData
和exportData
部署為雲端功能。 - 為應用程式中的功能實作觸發器。
- 使用儲存規則保護
clearData
資料。
編輯庫的user_privacy.json
文件
首先,複製或下載Firebase 使用者隱私 GitHub 儲存庫。
完成後,在文字編輯器中開啟functions/user_privacy.json
。 json 檔案具有一系列可自訂的路徑, clearData
和exportData
函數使用這些路徑在即時資料庫、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"] ] }, ...
如果您只想將其中一個函數新增至應用程式中,則可以刪除另一個函數的對象,而不是用您的資料填入它。
將clearData
和exportData
部署為雲端功能
如果您還不熟悉 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
:當使用者透過驗證刪除帳戶時觸發。 -
exportData
:由 HTTP 請求觸發。
實作clearData
觸發器
若要觸發clearData
事件,您需要使用驗證中的方法。如果您還沒有這樣做,請將身份驗證新增至您的應用程式: Apple 平台、 Android或web 。
然後,新增一種方法來為您的平台呼叫 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 規則。
- 存取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... } }