从匿名数据库中删除匿名用户

我正在使用Firebase数据库,并且与下一个情况有点混淆。

让我们想象我有待办事项的应用程序。 我使用标准的Firebase身份Auth系统在用户设备之间同步items 。 但在其他情况下,用户可以匿名工作而不需要同步。

步骤1:

用户启动应用程序第一次,并在AppDelegate我创build匿名用户:

 FIRAuth.auth()?.addStateDidChangeListener { auth, user in if let _user = user { if _user.isAnonymous { print("User logged in as anonymous. Saving uid to user defaults storage.") UserDefaults.standard.setValue(_user.uid, forKey: "uid") } else { print("User logged in with email: \(_user.email)") } } else { FIRAuth.auth()?.signInAnonymously() { (user, error) in if let _error = error { print("Anonymous signIn error: \(_error)") } } } } 

第2步:

这个匿名用户创build了几个待办事项并决定注册:

 let credential = FIREmailPasswordAuthProvider.credential(withEmail: emailField.text!, password: passwordField.text!) FIRAuth.auth()?.currentUser?.link(with: credential, completion: { user, error in if error == nil { FIRAuth.auth()!.signIn(withEmail: emailField.text!, password: passwordField.text!) } }) 

所以我修改了以前的代码,并更改创build的待办事项的所有者:

 if let prevUserUID = UserDefaults.standard.string(forKey: "uid"), prevUserUID != _user.uid { FIRDatabase.database().reference().child("todo-items").queryOrdered(byChild: "user").queryEqual(toValue: prevUserUID).observe(.value, with: { snapshot in for item in snapshot.children { var todoItem = TodoItem(snapshot: item as! FIRDataSnapshot) todoItem.user = _user.uid todoItem.ref?.setValue(todoItem.toAnyObject()) } }) print("Data migrated.") } 

好的一切正常。 但是,现在用户注销。 我创build了一个新的匿名用户。 然后他再次login,我合并数据。 但我不能连接帐户,因为我已经做过。 而我不能删除匿名用户从Auth数据库( 我的问题 )。 我们得到僵尸 ! 未使用的匿名帐户。 如果用户login/注销1000次,我们将获得1000个匿名帐户。