【问题标题】:How can you check if a childByAutoID() already exists in the Firebase Realtime Database?如何检查 Firebase 实时数据库中是否已存在 childByAutoID()?
【发布时间】:2018-11-15 23:00:57
【问题描述】:

我正在使用 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)

每次我登录时,即使使用相同的凭据,也会使用相同的登录用户创建一个新用户。如果特定用户之前登录过,如何防止创建新实例。

【问题讨论】:

    标签: ios swift xcode firebase firebase-realtime-database


    【解决方案1】:

    你应该使用:

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

    为了不出现可选的,你应该这样写:

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

    如果你想捕捉/防止 nil,或者打开它

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

    但是,由于同一用户输入新信息时用户 ID 不会改变,并且每次用户输入时您都使用自动键,因此每次都会创建一个新子项。

    【讨论】:

      【解决方案2】:

      您应该在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 ..
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-01-17
        • 2021-11-22
        • 1970-01-01
        • 1970-01-01
        • 2021-01-14
        • 2022-01-06
        • 1970-01-01
        • 2021-11-14
        相关资源
        最近更新 更多