2017-05-31 1 views
0

Nach der Anmeldung möchte ich, dass meine App ein neues Feld in der Firebase-Datenbank mit dem unter dem Benutzernamen angegebenen Kind erstellt.Wie füge ich einen Benutzernamen zur Firebase-Datenbank bei der Registrierung hinzu?

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") 
       } 

Wenn ich versuche, dies zu tun, gibt es mir einen Fehler genannt SIGABART die ich glaube, ist im Zusammenhang mit nicht richtig angeschlossen segues hat.

Doch wenn ich diese Zeile löschen:?. self.ref .child (E-Mail) .childByAutoId() setValue ("1")

oder email Feld wie "test" auf eine zufällige Zeichenfolge ändern, es funktioniert fein und erscheint in Firebase.

+0

Ein 'FIRUser' hat eine 'displayName'-Eigenschaft, die Sie mit einem' FIRUserProfileChangeRequest 'aktualisieren können, wenn Sie nur versuchen, einem Benutzer einen Namen zuzuordnen. –

Antwort

0

Wenn ich mich richtig erinnere, können Sie nicht das Symbol @ in Knoten Namen verwenden. Es ist das erste Problem. Sie können es andere tun, ich besser denken, Art und Weise:

Sie müssen Benutzer erstellen wie Ref:

/users/uid from created FIRUser. 

Sie es mit der nächsten Schritte tun können:

Zum Beispiel Ihre Registrierungsseite wird 3 haben UITextFields: userEmail, userLogin und 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))") 
    } 
    } 

So. Ich hoffe es hilft.

0

Mit Firebase Auth können Sie einen solchen Wert nicht speichern. Sie müssen dies in der Firebase-Datenbank oder einem anderen Dienst speichern. z.B. In der Firebase-Datenbank:

userRef.setValue("username123") 
+0

ja Ich habe FirebaseDatabase auch in meinem Projekt importiert. Ich habe versucht, eine separate String-Variable zu erstellen, die E-Mail-Zeichenfolge zu der dann an Firebase senden, aber es gibt mir immer noch den SIGABRT-Fehler. Das Problem scheint mit dem E-Mail-Feld zu sein, selbst wenn ich es in eine Zeichenfolge umwandle oder es einer Variablen zuweise, bleibt das Problem bestehen. Würden Sie es nicht einem Problem zuweisen, um das Auth-Problem zu beheben? Das verwirrt mich. – yuin265

0

Sie sollten den Benutzernamen Wert in der Datenbank speichern. Etwas wie folgt aus:

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

(Im auf meinem Handy, so kann der Anruf nicht genau so, aber sollte sehr nahe)

Beifall.

Verwandte Themen