使用“删除用户数据”扩展程序 (delete-user-data
),您可以在从 Firebase 项目中删除用户时,将该用户的数据也一并删除。您可以配置此扩展程序,从以下部分或所有产品中删除用户数据:Cloud Firestore、Realtime Database 或 Cloud Storage。此扩展程序中每个用于删除数据的触发器都与该用户的 UserId
相对应。
此扩展程序对于尊重用户隐私、满足合规性要求非常有用。但是,使用此扩展程序并不保证针对政府法规和行业规定的合规性。
前提条件
您必须使用 Firebase Authentication 管理您的用户。
此扩展程序只能从 Cloud Firestore、Realtime Database 和 Cloud Storage 中删除数据。如果您将用户数据存储在其他位置,那么在删除用户时,您需要自行从相应的来源位置删除用户数据。
安装扩展程序
如需安装该扩展程序,请按照安装 Firebase Extensions 扩展程序页面上的步骤操作。总的来说,请执行以下任一操作:
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 实例:
要从哪个 Realtime Database 实例中删除用户数据?
Realtime Database 位置:
(仅在您提供了
Realtime Database instance
参数的情况下适用。)要从哪个 Realtime Database 位置中删除用户数据?Realtime Database 路径:
您的 Realtime Database 实例中的哪些路径包含用户数据?如果您不使用 Realtime Database,请将其留空。输入完整路径,并使用英文逗号分隔各路径。您可以使用
{UID}
表示已删除用户的 ID。例如:users/{UID},admins/{UID}
。Cloud Storage 路径:
您在 Google Cloud Storage 中的何处存储用户数据?如果您不使用 Cloud Storage,请将其留空。输入 Storage 存储桶中文件或目录的完整路径,并使用英文逗号分隔各路径。使用
{UID}
表示已删除用户的 ID,使用{DEFAULT}
表示您的默认 Storage 存储桶。以下是一些示例:
- 如需删除默认存储桶中所有采用
{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}
。
- 如需删除默认存储桶中所有采用
发现要删除的数据
此扩展程序会通过多种机制来发现要删除的数据。必须明确配置这些机制,以便扩展程序使用相应的机制来删除数据。该扩展程序只会删除根据所提供的机制明确配置为要删除的数据。
请注意每项服务的行为存在以下差异:
- Cloud Firestore:默认对文档执行浅层删除(子集合不会被删除)。如需以递归方式删除文档的所有子集合,请将“Cloud Firestore 删除模式”选项设置为“递归”。
- Realtime Database:指定节点上的所有数据都将被删除。
- Storage:如果指定了目录路径,则该路径上的所有文件及子目录都将被删除。
按路径
配置 Cloud Firestore、Realtime Database 和 Cloud Storage 路径时,可以在路径中定义一个 UID
变量,该变量将被替换为经过身份验证的用户的 UID。当用户被删除时,该扩展程序会删除给定路径上与该 UID 相对应的所有数据,例如:
- Cloud Firestore 路径:
users/{UID},admins/{UID}
- Realtime Database 路径:
likes/{UID}
- Cloud Storage 路径:
{DEFAULT}/uploads/{UID},{DEFAULT}/avatars/{UID}.jpeg
自动发现 (Cloud Firestore)
如需让该扩展程序自动发现要删除的 Firestore 文档,请将“启用自动发现”配置参数设置为“是”。
自动发现的工作原理是自动遍历数据库,并查找根据您的配置应该删除的集合和文档。该扩展程序会通过以下方法识别这些集合和文档:
- 首先,该扩展程序会查找数据库中的所有根集合。如果某个集合的 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 相对应的数据。