【问题标题】:Deleting a user in Firebase auth and user data collection in Firebase database at the same time using Flutter使用 Flutter 同时删除 Firebase 身份验证中的用户和 Firebase 数据库中的用户数据收集
【发布时间】:2020-11-12 01:14:23
【问题描述】:

在我的 Flutter 应用中,我需要为用户提供删除其帐户的选项。此操作应从 Firebase 身份验证中删除用户记录以及 Firebase 数据库中的所有相关数据。我可以在这里想到两个选项:

  1. 先从 auth 中删除用户记录,然后从数据库中删除用户数据。在这种情况下,我会收到权限错误,因为删除后用户将被注销。
  2. 先从数据库中删除用户数据,再从auth中删除用户记录。在这种情况下,在用户数据被删除之后和用户被删除之前,应用程序仍处于登录状态并尝试获取现在已删除的用户数据,所以我在这里也遇到了错误。

在这两种情况下,有时用户记录和用户数据都会以某种方式被删除,但我确实在此过程中遇到了错误,我可以在控制台中看到它们。

如何从 Firebase 身份验证和数据库中正确删除用户及其相关数据?

感谢您的帮助!

【问题讨论】:

    标签: firebase flutter firebase-authentication


    【解决方案1】:

    我目前的流程是删除用户记录 (user.delete()),然后使用 Firebase 功能删除他们的数据:

    const database = admin.firestore();
    
    export const deleteProfile = functions.auth.user().onDelete(async (user) => {
        const batch = database.batch();
        const profile = profilesCollection.doc(user.uid);
    
        batch.delete(profile);
    
        // Any other necessary cleanup
        
        await batch.commit();
    
        console.log(`Deleted profile ${user.uid}`);
    });
    

    确保正确处理user.delete() 错误,例如需要重新授权。

    这有一个额外的好处,您可以从 Firebase 控制台中删除用户并在那里清理他们的数据。

    【讨论】:

    • 嗨。感谢您的回复。当您说“处理删除错误,例如需要重新授权”时,您的意思是这样的吗? stackoverflow.com/a/61462369/10997988
    • 是的,这个答案可能只是在尝试删除用户之前重新验证以避免ERROR_REQUIRES_RECENT_LOGIN。您可以这样做,或者先尝试删除用户,如果有错误,则捕获错误,然后抛出一个对话框,提示用户应该再次输入他们的凭据。这是其他可能的errors
    • 明白了!在您为 firebase 功能提供的代码中,我认为我应该将“profilesCollection”替换为存储用户数据的集合。正确的?另外,“数据库”怎么样?我应该用什么代替它吗?
    • 抱歉,编辑了我的答案以包含数据库变量。你会从'firebase-admin'那里得到它。如果有兴趣,请参阅文档。是的,您不一定需要batch,但如果您在用户数据文档(在我的情况下为profile)中有嵌套集合,它会很有帮助,因为删除文档不会删除子集合。如果您的用户数据只是一个文档,请随时直接获取参考并在其上调用 delete await userDataCollection.doc(user.uid).delete()
    • 知道了。感谢您的更新和回复。很有帮助!
    猜你喜欢
    • 2019-07-21
    • 1970-01-01
    • 2017-07-28
    • 2019-08-13
    • 2018-07-15
    • 2019-07-10
    • 2021-02-28
    • 2021-03-25
    相关资源
    最近更新 更多