2017-05-31 81 views
0

登錄後,我希望我的應用以用戶名命名的子級在Firebase數據庫中創建一個新字段。如何在註冊後將用戶名添加到Firebase數據庫?

if let email = emailField.text, let pass = passwordField.text { 

     // Check if it's sign in or register 
     if isLogin { 
      // Sign in the user with Firebase 
      Auth.auth().signIn(withEmail: email, password: pass, completion: { (user, error) in 

       // Check that user isn't nil 
       if let u = user { 
        // User is found, go to home screen 

        self.ref?.child(email).childByAutoId().setValue("1") 
        self.performSegue(withIdentifier: "goHome", sender: self) 
        print("yes") 
       } 

當我嘗試這樣做,它給了我叫SIGABART我相信這是有沒有正確連接塞格斯相關聯的錯誤。

然而,如果我刪除這一行:? self.ref .child(電子郵件).childByAutoId()的setValue( 「1」)

email字段更改爲像"test"一個隨機字符串,它的工作原理很好,並出現在Firebase中。

+0

'FIRUser'具有'displayName'屬性,如果您只是試圖將名稱與用戶相關聯,則可以使用'FIRUserProfileChangeRequest'進行更新。 –

回答

0

如果我沒有記錯,您不能在節點名稱中使用符號@。這是第一個問題。你可以這樣做另一個,我想更好,道:

您需要創建用戶參考,如:

/users/uid from created FIRUser. 

你可以用下面的步驟做:

例如,您的註冊頁面將具有3 UITextFieldsuserEmailuserLoginuserPassword

// *1* Create user 
FIRAuth.auth()!.createUser(withEmail: userEmail.text!, 
          password: userPassword.text!) 
    { user, error in 
    if error == nil { 
     // *2* Then log him in 
     FIRAuth.auth()!.signIn(withEmail: self.userEmail.text!, 
           password: self.userPassword.text!) 
     { result in 
      // *3* Create new user in database, not in FIRAuth 
      let uid = (FIRAuth.auth()?.currentUser?.uid)! 
      let ref = FIRDatabase.database().reference(withPath: "someStartPart/users").child(uid) 
      ref.setValue(["uid": uid, "email": userEmail.text!, "login": userLogin.text!, "creationDate": String(describing: Date())]) 

      self.performSegue(withIdentifier: "fromRegistrationToMainPage", sender: self) 
     } 
    } else { 
     print("\(String(describing: error?.localizedDescription))") 
    } 
    } 

像這樣。希望能幫助到你。

0

Firebase身份驗證不會允許您存儲此類值。您需要將其保存到Firebase數據庫或其他服務中。例如在Firebase數據庫中:

userRef.setValue("username123") 
+0

是的,我的FirebaseDatabase也在我的項目中導入。我嘗試製作一個單獨的字符串變量,將電子郵件字符串分配給該字符串,然後將其發送到Firebase,但它仍然給我SIGABRT錯誤。問題似乎與電子郵件字段,即使我將其轉換爲字符串或將其分配給一個變量問題仍然存在。不會將其分配給解決auth問題?這讓我感到困惑。 – yuin265

0

您應該將用戶名值保存在數據庫中。事情是這樣的:

FIRdatabase.database().reference().child("yourchildname").updateChild(u) 

(IM我的手機上,因此呼叫可能不完全一樣,但應該非常接近)

乾杯。

相關問題