Swift 如何使对Firebase的多次呼叫更安全?-敏捷的

Swift 如何使对Firebase的多次呼叫更安全?-敏捷的,swift,firebase,google-cloud-firestore,firebase-authentication,Swift,Firebase,Google Cloud Firestore,Firebase Authentication,因此,我的应用程序中有一个“删除帐户”按钮,当用户点击它时,它会删除身份验证帐户以及其他3个Firestore文档。我担心一个功能可能成功,而其他功能可能失败。我如何确保如果一个功能失败,所有功能都会失败 func deleteUser () { let currentUser = Auth.auth().currentUser Auth.auth().currentUser?.delete(completion: { (error) in

因此,我的应用程序中有一个“删除帐户”按钮,当用户点击它时,它会删除身份验证帐户以及其他3个Firestore文档。我担心一个功能可能成功,而其他功能可能失败。我如何确保如果一个功能失败,所有功能都会失败

    func deleteUser () {
        let currentUser = Auth.auth().currentUser

        Auth.auth().currentUser?.delete(completion: { (error) in
            if error != nil { return }
            else {
                Firestore.firestore().collection("Users").document(currentUser!.uid).delete { (error) in
                    if error != nil { return }
                    else {
                        Firestore.firestore().collection("Posts").document(currentUser!.uid).delete { (error) in
                            if error != nil { return }
                            else {
                                transitionToHomeScreen()
                            }
                        }
                    }
                }
            }
        })
    }

首先,您可能应该在删除用户之前删除文档。如果先删除用户,则用户可能会失去删除其文档的能力,具体取决于您的安全规则允许的内容

其次,无法确保Firebase Auth和Firestore之间以及任何两个Firebase产品之间的事务一致性。如果Firestore中出现故障,则无法自动回滚对Auth的更改,反之亦然。如果需要回滚更改,则必须为此编写代码


如果要确保同时删除多个文档,应使用确保同时删除所有文档或不删除任何文档。

首先,您可能应该在删除用户之前删除这些文档。如果先删除用户,则用户可能会失去删除其文档的能力,具体取决于您的安全规则允许的内容

其次,无法确保Firebase Auth和Firestore之间以及任何两个Firebase产品之间的事务一致性。如果Firestore中出现故障,则无法自动回滚对Auth的更改,反之亦然。如果需要回滚更改,则必须为此编写代码

如果要确保同时删除多个文档,应使用来确保同时删除所有文档或不删除任何文档