0
我使用的是Firebase數據庫,並且與下一個情況很少混淆。從Auth數據庫中刪除匿名用戶
讓我們想象我有待辦事項的應用程序。我在用戶設備之間使用標準的Firebase Auth
系統進行同步items
。但在其他情況下,用戶可以在沒有同步的情況下匿名工作。
步驟1:
用戶發射的應用程序第一次,並且在AppDelegate
我創建匿名用戶:
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:
這個匿名用戶創建幾個待辦事項並決定註冊:
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!)
}
})
的待辦事項創造,所以我必須修改以前的代碼和變化所有者:
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.")
}
確定一切正常。但是,現在用戶已註銷。我創建了一個新的匿名用戶。然後他再次登錄併合並數據。但我不能連接帳戶,因爲我之前已經這樣做了。我無法刪除Auth
數據庫(my question)中的匿名用戶。我們得到zombie!未使用的匿名帳戶。如果用戶登錄/註銷1000次,我們將獲得1000個匿名帳戶。
FIRAuth.auth()!.signIn
你保持匿名用戶的UID:
什麼是最終目標的憑據?該主題說,從數據庫中刪除auth用戶(矛盾)。爲什麼創建多個匿名帳戶?你怎麼知道他們屬於同一個用戶,爲什麼我們在乎他們是否堅持?要麼讓匿名用戶創建陳舊的數據還是不應該允許匿名寫入?數據應該在一段時間後過期嗎?匿名用戶離開後立即刪除?什麼是最終目標? – Kato
最終目標是如何從Auth數據庫中刪除匿名帳戶。當用戶從匿名帳戶登錄時,我將屬於匿名的所有數據移動到用戶帳戶中。然後我不需要匿名,因爲如果用戶註銷,他再也不會進入它'signInAnonymously()'將創建新的實例。 – Arti
@Kato所以現在我只有一個設備,並創建一個帳戶。但我登錄/註銷 - 20次,並有20個未使用的匿名帳戶。 – Arti