如何使用带有Firebase的Swift使用UIAlert删除当前用户

时间:2018-10-31 20:31:11

标签: swift xcode firebase authentication firebase-authentication

快速问题,我正在尝试为用户提供使用Xcode上的swift从firebase删除其帐户的选项。

我目前有一个“删除”按钮,该按钮会导致UIAlert询问用户是否确定要删除自己的帐户(以防万一) enter image description here

下面是我执行此操作的代码

//Handles delete current user account (not fnished yet)
@IBAction func deleteAccount(_ sender: Any) {
    createAlert2(title: "Delete Account", message: "Are you sure you want to delete your account? This will permanently erase your account.")
}

此功能

    func createAlert2 (title:String, message:String){
    let alert2 = UIAlertController(title: title, message: message, preferredStyle: UIAlertControllerStyle.alert)

    alert2.addAction(UIAlertAction(title: "Cancel", style: UIAlertActionStyle.cancel, handler: { (action) in
        alert2.dismiss(animated: true, completion: nil)
    }))
    alert2.addAction(UIAlertAction(title: "Delete", style: UIAlertActionStyle.destructive, handler: { (action) in
        let user = Auth.auth().currentUser

        user?.delete { error in
            if error != nil {
                // An error happened.
            } else {
                // Account deleted.
                print("user deleted")
            }
        }
        let controller2 = UIStoryboard.init(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "MenuViewController") as! MenuViewController
        self.present(controller2, animated: true, completion: nil)
    }))
    self.present(alert2, animated: true, completion: nil)

我的目标是删除用户并将其发送回该MenuViewController。但是似乎要做的就是将用户转到该菜单视图,而不是实际上删除他们在firebase上的帐户。感谢您的帮助,我一直喜欢并选中答案。谢谢:)

1 个答案:

答案 0 :(得分:0)

如果您打印错误或仅在用户之后添加几个断点?删除,您很可能会看到类似这样的内容:

  

可选     -某些:错误Domain = FIRAuthErrorDomain代码= 17014“此操作敏感,需要最近的身份验证。在重试此请求之前,请再次登录。” UserInfo = {NSLocalizedDescription =此操作敏感,需要最近的身份验证。重试此请求之前,请再次登录。,error_name = ERROR_REQUIRES_RECENT_LOGIN}

这意味着您需要使用凭据(电子邮件,密码)进行注册或重新进行身份验证,才能删除您的用户。您可以在下面进行一些改进的用户代码(选择获取凭证的方式)

//最新的Firebase +迅捷4

std::string

很遗憾,此问题文档非常差(尤其是最新版本)。希望您发现我的回答有用。 注意***:让用户能够直接删除其个人资料是一个非常糟糕的主意(IMHO),如果您发送电子邮件通知并禁用用户并使他的令牌或UID无效,则更好,这将为您将来提供更大的灵活性。