簡體   English   中英

如何檢查 childByAutoID() 是否已存在於 Firebase 實時數據庫中?

[英]How can you check if a childByAutoID() already exists in the Firebase Realtime Database?

我正在使用 Facebook 和 Google 登錄協議登錄我的用戶。 我可以通過執行以下操作來存儲這些用戶:

 let firebaseID = Auth.auth().currentUser?.uid
    let userID = user.userID
    let fullName = user.profile.name
    let email = user.profile.email
    let provider = "Google"
    guard let authentication = user.authentication else {return}
    let credential = GoogleAuthProvider.credential(withIDToken: authentication.idToken, accessToken: authentication.accessToken)
    Auth.auth().signInAndRetrieveData(with: credential) { (authResult, error) in
            if let error = error {
                print("Failed to create Firebase User with Google: ", error)
                return        
            }
            print("Successful creation of Firebase User with Google")
            let databaseRef = Database.database().reference()
            let key = databaseRef.child("node").childByAutoId().key
            let userInfo = ["UID": userID,
                            "Full Name": fullName,
                            "Email": email,
                            "Provider": provider]
            let childUpdates = ["/Users/\(key)/": userInfo]           
    databaseRef.updateChildValues(childUpdates)

每次我登錄時,即使使用相同的憑據,也會創建一個具有相同登錄用戶的新用戶。 如果特定用戶之前已登錄,如何防止創建新實例。

在此處輸入圖片說明

你應該使用:

let childUpdates = ["/Users/\(userID)/": userInfo] 

為了不出現可選項,你應該這樣寫:

let key = databaseRef.child("node").childByAutoId().key ?? ""    

或者如果你想捕捉/防止 nil 就打開它

let key = databaseRef.child("node").childByAutoId().key!

但是,由於當同一用戶輸入新信息時用戶 ID 不會更改,並且每次用戶輸入時都使用自動鍵,因此每次都會創建一個新子項。

您應該在signInAndRetrieveData之后檢查用戶是否已經注冊或沒有注冊:

Auth.auth().signInAndRetrieveData(with: credential) { (authResult, error) in
    if let error = error {
        return
    }

    if(isNewUser()) {
        // create new user in Firebase
    }
    else {
        // continue and skip creating user ..
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM