更新:
在做了一些研究并阅读了这个网站上关于这个问题的许多其他答案之后,我使用了这种方法,我认为对于像我这样的傻瓜来说它是如此简单,但从未在其他答案中提及我不知道为什么:
为了从身份验证中完全删除用户,我使用了名为“删除用户数据”的 Firestore 扩展程序,这是一个很大的帮助,它很神奇,让我只需使用以下代码即可删除用户:
FirebaseAuth.getInstance().getCurrentUser().delete().addOnSuccessListener(new OnSuccessListener<Void>() {...}
它不仅删除了用户身份验证,仅使用该代码,firestore 中特定用户的数据和存储中的图像也消失了。太棒了!
重要的一点是,您必须从身份验证连接用户 UID,并将 UID 连接到 Firestore 和存储。
要了解有关如何使用“删除用户数据”Firestore 扩展程序的更多信息(它仍处于测试模式),请尝试查看 JORGE VERGARA 的这篇很棒的博客教程:Installing the Delete User Data extension
我如何设置扩展的配置来删除用户:
如何使用扩展程序:它是如此简单我很高兴它可以帮助我轻松删除用户而无需大惊小怪
这是存储结构:
我的 Firestore 的结构:
main(collection)--->userID---->journal(collection)----->journalIDdsvsfbsf
----->journalIDdfvdbgnd
--->userID2--->journal(collection)----->journalIDdsvsfbsf
----->journalIDdfvdbgnd
身份验证结构:
了解 Firestore 和存储必须如何使用相同的用户 UID 连接,以便 Firestore 扩展可以通过删除身份验证轻松删除用户。
如果您仍想使用旧方法:
我注意到您不能仅使用 delete 方法删除包含一个或多个子集合的 Firestore 文档。例如,如果您要删除包含 3 个子集合的文档,为了删除该文档(在我的情况下为用户),您必须获取其中一个子集合中的所有文档,将它们全部删除,然后继续对该文档中的所有其他子集合执行相同的操作。一旦删除了文档中的所有子集合,则包含它们的文档将自行消失。这就是 Firestore 的工作方式。
将其放入代码中:
删除包含子集合“journal”的文档
如果不使用扩展,我必须这样做:
FirebaseFirestore.getInstance().collection("main").document(userid).collection("journal").get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
for (final QueryDocumentSnapshot document : task.getResult()) {
if (document.exists()){
db.collection("main").document(userid).collection("journal").document(document.getId()).delete().addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Toast.makeText(SettingsActivity.this, "Journal: " + e.getMessage(), Toast.LENGTH_LONG).show();
}
});
} else {
Toast.makeText(SettingsActivity.this, "No data in JOURNAL", Toast.LENGTH_SHORT).show();
}
}
} else {
Toast.makeText(SettingsActivity.this, "Journal task: " + task.getException(), Toast.LENGTH_LONG).show();
}
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Toast.makeText(SettingsActivity.this, "Error getting all the documents: " + e.getMessage(), Toast.LENGTH_LONG).show();
}
});
如果您在该特定文档中有多个子集合,要删除它,您必须为不同的子集合重复该代码多次,这会使代码很长。
我希望这对试图从 Firestore 中删除用户的人有所帮助。 :) 已经在使用扩展了。