从匿名数据库中删除匿名用户
我正在使用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个匿名帐户。