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:

+0

什麼是最終目標的憑據?該主題說,從數據庫中刪除auth用戶(矛盾)。爲什麼創建多個匿名帳戶?你怎麼知道他們屬於同一個用戶,爲什麼我們在乎他們是否堅持?要麼讓匿名用戶創建陳舊的數據還是不應該允許匿名寫入?數據應該在一段時間後過期嗎?匿名用戶離開後立即刪除?什麼是最終目標? – Kato

+0

最終目標是如何從Auth數據庫中刪除匿名帳戶。當用戶從匿名帳戶登錄時,我將屬於匿名的所有數據移動到用戶帳戶中。然後我不需要匿名,因爲如果用戶註銷,他再也不會進入它'signInAnonymously()'將創建新的實例。 – Arti

+0

@Kato所以現在我只有一個設備,並創建一個帳戶。但我登錄/註銷 - 20次,並有20個未使用的匿名帳戶。 – Arti

回答

0

當您鏈接與您已經登錄的currentUser憑證,對於不需要。

如果用戶已經有一個帳戶,在這種情況下,你需要:

currentUser.delete() 

然後登錄並提供