2017-05-31 14 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") 
       } 

、それは私が正しく接続seguesを持っていないに関連付けられていると信じてSIGABARTと呼ばれるエラーが発生します。

しかし、私はこの行を削除する場合:?。 self.ref .child(電子メール).childByAutoIdを()のsetValue( "1")

または"test"のようなランダムな文字列にemailフィールドを変更し、それが動作しますFirebaseに表示されます。

+0

'FIRUser'は' displayName'プロパティを持っています。このプロパティは 'FIRUserProfileChangeRequest'で更新できます。単に名前をユーザに関連づけようとしているだけです。 –

答えて

0

正しく覚えていれば、ノード名にシンボル@を使用することはできません。それは最初の問題です。あなたが次のステップでそれを行うことができます

/users/uid from created FIRUser. 

:あなたが好きrefにユーザーを作成する必要が

:あなたはそれを別の、私はより良いと思う方法を行うことができます

たとえば、あなたの登録ページを3 UITextFieldsuserEmail,userLoginおよびuserPasswordとなります。

// *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 Authでは、このような値を保存することはできません。これをFirebaseデータベースまたは別のサービスに保存する必要があります。例えばFirebaseデータベース:

userRef.setValue("username123") 
+0

はいプロジェクトでFirebaseDatabaseをインポートしました。別の文字列変数を作成しようとしました。それに電子メール文字列を割り当ててfirebaseに送信しましたが、それでもSIGABRTエラーが出ます。私はそれを文字列に変換したり、問題を解決する変数に代入しても、電子メールフィールドに問題があるようです。 authの問題を解決するためにそれを割り当てないでしょうか?それが私を混乱させている。 – yuin265

0

データベースにユーザ名の値を保存する必要があります。

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

(イム私の携帯電話に、その呼び出しはまさにそのようなことはないかもしれませんが、非常に近いはずである)

乾杯:このような何か。

関連する問題