添加函数来清除和导出用户数据

为了便于您帮助用户控制其数据,Firebase 团队创建了一个库,用于简化两种常见的用户数据处理流程:

  • clearData:在用户通过 Firebase 身份验证删除其帐号时从 Firebase 服务中删除用户的数据。

  • exportData:将 Firebase 服务中的用户数据副本保存为 JSON 字符串,并将其上传到 Cloud Storage,以便用户轻松自行下载该副本。

您可以继续阅读以了解如何向您的应用添加函数,也可以访问 Firebase 用户隐私 GitHub 代码库直接查看代码部分。

向您的应用添加 clearDataexportData

该库中的 clearDataexportData 函数以 Cloud Functions 的形式实现,可对实时数据库、Cloud Storage 和 Cloud Firestore 中的数据执行操作。在您自己的应用中添加函数的过程分为三步:

  1. 修改该库的 user_privacy.json 文件,以反映您应用的实时数据库、Cloud Firestore 和 Cloud Storage 架构。
  2. clearDataexportData 作为 Cloud Functions 部署。
  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 入门指南,了解如何使用 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 事件,您需要使用身份验证中的方法。如果您还没有使用,请向您的应用添加身份验证:iOSAndroid网页

然后,添加一种方法来为您的平台调用 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 请求调用函数,详细了解如何通过 HTTP 调用函数。

请求详情:

  • 类型:POST
  • 网址:https://us-central1-<var>PROJECT-ID<.var>.cloudfunctions.net/exportData
  • 正文:<var>CURRENT_USER'S_UID</var>

直接在 Firebase 托管中调用函数

如果您的应用是托管在 Firebase 托管上的网页应用,您可以通过网站的 firebase.json 文件中的 rewrite 条目来调用您的 clearData 函数:

  "hosting": {
    "rewrites": [
       {"source": "/exportData", "function": "exportData"}
    ]
  }

使用存储规则保障 exportData 数据的安全

为了保持用户的导出数据的私密性,请添加会限制对导出用户的访问权限的 Cloud Storage 规则。

  1. 访问 Firebase 控制台中的 Storage(存储)部分。
  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...
  }
}

发送以下问题的反馈:

此网页
需要帮助?请访问我们的支持页面