「刪除使用者資料」擴充功能 (delete-user-data) 可讓您在使用者從 Firebase 專案中刪除時,一併刪除該使用者的資料。您可以設定這項擴充功能,從下列任一或所有位置刪除使用者資料:Cloud Firestore、即時資料庫 或 Cloud Storage。每次觸發擴充功能刪除資料時,都會以使用者的 UserId 為索引鍵。
這項擴充功能有助於尊重使用者隱私權,並符合法規遵循要求。不過,使用這項擴充功能並不保證符合政府和產業法規。
必要條件
您必須使用 Firebase 驗證管理使用者。
這項擴充功能只會刪除 Cloud Firestore、即時資料庫 和 Cloud Storage 中的資料。如果您將使用者資料儲存在其他位置,刪除使用者時,也應從這些來源刪除使用者資料。
安裝擴充功能
如要安裝擴充功能,請按照「安裝 Firebase 擴充功能」頁面上的步驟操作。總之,請執行下列其中一項操作:
Firebase 控制台:按一下下列按鈕:
CLI:執行下列指令:
firebase ext:install firebase/delete-user-data --project=projectId-or-alias
安裝擴充功能時,系統會提示您指定多個設定參數:
Cloud Functions 位置:
選取要部署這項擴充功能所建立函式的位置。通常會希望將函數部署到靠近資料庫的位置。如需選取位置的說明,請參閱位置選取指南。
Cloud Firestore 路徑:
在 Cloud Firestore 執行個體中,哪些路徑下包含使用者資料?如果您不使用 Cloud Firestore,請留空。請輸入完整路徑,並以半形逗號分隔。您可以使用
{UID}代表已刪除使用者的使用者 ID。舉例來說,如果您有users和admins集合,且每個集合都有以使用者 ID 做為文件 ID 的文件,則可輸入users/{UID},admins/{UID}。Cloud Firestore 刪除模式:
(僅適用於使用
Cloud Firestore paths參數的情況。)要如何刪除 Cloud Firestore 文件?如要一併刪除子集合中的文件,請將這個參數設為recursive。即時資料庫執行個體:
您要從哪個即時資料庫執行個體刪除使用者資料?
即時資料庫位置:
(僅適用於提供
Realtime Database instance參數的情況)。您要從哪個即時資料庫位置刪除使用者資料?即時資料庫路徑:
在即時資料庫執行個體中,哪些路徑下包含使用者資料?如果您不使用 Realtime Database,請留空。請輸入完整路徑,並以半形逗號分隔。您可以使用
{UID}代表已刪除使用者的使用者 ID。例如:users/{UID},admins/{UID}。Cloud Storage 路徑:
你要將使用者資料儲存在 Google Cloud Storage 中的哪個位置?如果不使用 Cloud Storage,請留空。輸入 Storage bucket 中檔案或目錄的完整路徑,並以半形逗號分隔。請使用
{UID}代表已刪除使用者的 ID,並使用{DEFAULT}代表預設 Storage bucket。以下是一系列範例:
- 如要刪除預設 bucket 中所有檔案命名架構為
{UID}-pic.png的檔案,請輸入{DEFAULT}/{UID}-pic.png。 - 如要一併刪除另一個值區
my-app-logs中所有檔案命名架構為{UID}-logs.txt的檔案,請輸入{DEFAULT}/{UID}-pic.png,my-app-logs/{UID}-logs.txt。 - 如要一併刪除標有使用者 ID 的目錄及其所有檔案 (例如
media/{UID}),請輸入{DEFAULT}/{UID}-pic.png,my-app-logs/{UID}-logs.txt,{DEFAULT}/media/{UID}。
- 如要刪除預設 bucket 中所有檔案命名架構為
探索要刪除的資料
這項擴充功能會使用幾種機制,找出要刪除的資料。您必須明確設定這些機制,擴充功能才能刪除資料。擴充功能只會根據提供的機制,刪除明確設定為刪除的資料。
請注意,各服務的行為差異如下:
- Cloud Firestore:預設行為是淺層刪除文件 (不會刪除子集合)。如要遞迴刪除文件的所有子集合,請將「Cloud Firestore delete mode」選項設為「Recursive」。
- 即時資料庫:指定節點的所有資料都會刪除。
- Storage:如果指定目錄路徑,系統會刪除所有檔案和子目錄。
依路徑
設定 Cloud Firestore、即時資料庫和 Cloud Storage 路徑時,您可以在路徑中定義 UID 變數,系統會將該變數替換為已驗證使用者的 UID。刪除使用者時,擴充功能會刪除指定路徑中以該 UID 為鍵的所有資料,例如:
- Cloud Firestore 路徑:
users/{UID},admins/{UID} - 即時資料庫路徑:
likes/{UID} - Cloud Storage 路徑:
{DEFAULT}/uploads/{UID},{DEFAULT}/avatars/{UID}.jpeg
自動探索 (Cloud Firestore)
如要讓擴充功能自動找出要刪除的 Firestore 文件,請將「Enable auto discovery」設定參數設為「Yes」。
自動探索功能會自動遍歷資料庫,找出應根據設定刪除的集合和文件。擴充功能會使用下列方法識別這些集合和文件:
- 首先,擴充功能會找出資料庫中的所有根集合。如果集合的 ID 與使用者的 UID 相符,系統就會刪除整個集合 (刪除作業可能是遞迴或淺層,取決於擴充功能的「Cloud Firestore 刪除模式」設定)。
- 其次,如果集合 ID 不相符,擴充功能會嘗試找出並刪除文件 ID 與使用者 UID 相符的文件。
- 最後,針對每份文件: a. 如果目前的搜尋深度 (請見下方) 小於或等於設定的搜尋深度,系統會對目前文件的所有子集合重複執行這項程序。 b. 如果已設定搜尋欄位,擴充功能會檢查提供的欄位是否與使用者的 UID 相符。如果找到相符項目,系統就會刪除文件。
搜尋瀏覽頁數
擴充功能提供可設定的搜尋深度值 (預設為 3)。只有在目前搜尋深度小於或等於設定的搜尋深度時,系統才會執行遍歷。目前的搜尋瀏覽頁數取決於目前集合或文件父項集合的深度,例如
/users = 1
/users/<document-id> = 1
/users/<document-id>/comments = 2
/users/<document-id>/comments/<document-id> = 2
這項擴充功能「不會」自動刪除儲存在陣列或對應中的 UID,也不會搜尋儲存在深度巢狀子集合中、以使用者 ID 為索引鍵的資料 (超過上述指定深度)。