首页 > 解决方案 > Firestore 删除用户的所有引用

问题描述

我有一个内置反应原生的聊天应用程序。当用户决定删除他们的个人资料时,我想从数据库中删除他们的所有引用。

数据库在“matches”表、“chat”表和“messages”表中引用了被删除用户正在与之聊天的每个人的用户 ID。

我正在使用 firebase 函数来处理用户文档数据和身份验证的删除,但我不确定删除所有这些引用的最佳方法是什么。我的问题是:从有点复杂的数据库中删除 ID 的所有引用的最佳方法是什么?我认为循环遍历数据库中的每个用户来搜索这个 ID 会很费力。

deleteAccount = () => {
var db = firebase.firestore();
firebase.auth().onAuthStateChanged(async (user) => {
  if (user) {
    //delete user data
    db.collection("Users")
      .doc(user.uid)
      .delete();
  } else {
    console.log("user needs to reauth");
    return false;
  }
});
};

火力基地功能

exports.deleteUser = functions.firestore
  .document("Users/{userID}")
  .onDelete((snap, context) => {
    const deletedValue = snap.data();
    // Delete the images
    try {
      admin.auth().deleteUser(deletedValue.id);

      const imgRef1 = firebase.storage().ref(user.uid + "/images/0")
        ? firebase.storage().ref(user.uid + "/images/0")
        : null;
      const imgRef2 = firebase.storage().ref(user.uid + "/images/1")
        ? firebase.storage().ref(user.uid + "/images/1")
        : null;
      const imgRef3 = firebase.storage().ref(user.uid + "/images/2")
        ? firebase.storage().ref(user.uid + "/images/2")
        : null;
      imgRef1.delete().then(function() {
        imgRef2.delete().then(function() {
          imgRef3.delete().then(function() {});
        });
      });
    } catch (e) {
      console.log("no images to delete");
    }
  });

标签: javascriptreact-nativegoogle-cloud-firestoregoogle-cloud-functionsfirebase-storage

解决方案


Firebase 产品(例如数据库和存储)不知道哪些数据属于哪些用户。这种关系之所以存在,是因为您的应用程序代码做到了。

出于这个原因,您还必须在删除用户时查找/遍历关系,以查找(和删除)他们的数据。这里的产品没有快捷方式,尽管有一个开源库包含一个从配置文件工作的实现:user-data-protection

编辑:我刚刚意识到实际上有一个 Extension to Delete User Data,它与上面链接的库几乎相同。如果适合您的需求,可能值得一看


推荐阅读