javascript - 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");
}
});
解决方案
Firebase 产品(例如数据库和存储)不知道哪些数据属于哪些用户。这种关系之所以存在,是因为您的应用程序代码做到了。
出于这个原因,您还必须在删除用户时查找/遍历关系,以查找(和删除)他们的数据。这里的产品没有快捷方式,尽管有一个开源库包含一个从配置文件工作的实现:user-data-protection
编辑:我刚刚意识到实际上有一个 Extension to Delete User Data,它与上面链接的库几乎相同。如果适合您的需求,可能值得一看
推荐阅读
- jquery - 如何在 odoo 中为 many2many_binary 小部件使用文档查看器
- javascript - 在 Array.map() 调用中的 async/await 之后,并非所有元素都得到解决
- excel - 时间序列值与我的 Excel 图表上的水平轴不匹配
- android - android.bluetooth 中没有 LE
- c++ - 我可以对不同的网址使用相同的 curl 句柄吗?(试图从一个 url 的多个页面下载数据)
- python - TypeError: issubclass() arg 1 必须是 Django 测试中的一个类
- angular - Subject.subscribe 未在 ngOnInit 中触发
- flutter - 如何解决对话框中的溢出问题?
- php - 在按钮单击 Laravel 时从视图中切换数据库值
- reactjs - 如何在div的所有子项之间添加空格