2016-05-21 5 views
0

Ich entwickle eine iOS-App in swift, die einen Benutzer erfordert, um ein Konto durch Verbinden ihres Facebook-Kontos zu erstellen. Vor einem Monat, als ich mich mit meinem eigenen Facebook-Konto anmeldete, war die von Firebase erstellte Benutzer-UID im Format "facebook: (facebook app id)". Das war, was ich wollte.Firebase erstellt kein Facebook-Konto Benutzer-ID mit der Facebook-App Benutzer-ID

In letzter Zeit jedoch erstellt Firebase, wenn ein Benutzer ein neues Konto erstellt, indem er sein Facebook-Konto mit meiner App verbindet, eine Benutzer-UID, die eine zufällige Zeichenfolge verwendet. Zum Beispiel: "E9FaL87wRmOKfhen2S6yszhCwtx1". Könnte das an dem neuen Firebase-Update liegen? Sollte ich den Migrationsprozess durchlaufen?

Hier ist mein Code für Kontoerstellung:

@IBAction func facebookAuthAction(sender: AnyObject) { 
    let facebookLogin = FBSDKLoginManager() 

    facebookLogin.logInWithReadPermissions(nil, fromViewController: nil, handler: {(facebookResult, facebookError) -> Void in 

     if facebookError != nil { 
      print("Facebook login failed. Error \(facebookError)") 
     } else if facebookResult.isCancelled { 
      print("Facebook login was cancelled.") 
     } else { 
      let accessToken = FBSDKAccessToken.currentAccessToken().tokenString 

      FIREBASE_REF.authWithOAuthProvider("facebook", token: accessToken, withCompletionBlock: { error, authData in 

        if error != nil { 
         print("Login failed. \(error)") 
        } else { 
         print("Logged in! \(authData)") 
         NSUserDefaults.standardUserDefaults().setValue(authData.uid, forKey: "uid") 

         FIREBASE_REF.childByAppendingPath("users").observeEventType(.Value, withBlock: {snapshot in 
          if snapshot.hasChild(authData.uid) == false { 
           self.createNewFBUser(authData.uid) 
          } 
         }) 

         self.performSegueWithIdentifier("loginSegue", sender: self) 
        } 
      }) 
     } 
    }) 
} 

func createNewFBUser(uid: String) { 
    var emailAddress:String = "" 
    var firstName:String = "" 
    var lastName:String = "" 
    var pictureURL:String = "" 

    let parameters = ["fields": "email, first_name, last_name, picture.type(large)"] 
    FBSDKGraphRequest(graphPath: "me", parameters: parameters).startWithCompletionHandler {(connection, result, error) -> Void in 

     if error != nil { 
      print(error) 
      return 
     } 

     if let email = result["email"] as? String { 
      emailAddress = email 
     } 
     if let first_name = result["first_name"] as? String { 
      firstName = first_name 
     } 
     if let last_name = result["last_name"] as? String { 
      lastName = last_name 
     } 
     if let picture = result["picture"] as? NSDictionary, data = picture["data"] as? NSDictionary, url = data["url"] as? String { 
      pictureURL = url 
     } 

     let newUser = [ 
      "provider": "facebook", 
      "firstName": firstName, 
      "lastName": lastName, 
      "email": emailAddress, 
      "picture": pictureURL 
     ] 
     FIREBASE_REF.childByAppendingPath("users").childByAppendingPath(uid).setValue(newUser) 
    } 
} 
+0

Ich denke, Sie sollten auf die neue Version der Firebase verschieben, ich denke, Google wird die "alte" Firebase bald herunterfahren –

+0

* Firebaser hier * Die Firebase.com-Website wird in absehbarer Zukunft betriebsbereit bleiben. Die Firebase 2.x SDKs werden weiterhin unterstützt. Das heißt: Wir hoffen, dass sich unsere Entwickler für ein Upgrade auf unsere neue Firebase-Konsole und APIs entscheiden. –

+0

@Dylan: Haben Sie dieses Projekt auf die neue [Firebase-Konsole] (https://console.firebase.google.com) aktualisiert? –

Antwort

1

Wenn Sie Ihr Projekt auf die new Firebase Console aktualisieren, die Benutzer auf die neue Authentifizierungs-Backend-migriert werden.

Neu erstellte Benutzer erhalten nach dem Upgrade eine UID im neuen Format. Weitere Informationen zur Änderung und zur Anwendung auf vorhandene (nicht aktualisierte) Firebase-Apps finden Sie unter post on the firebase-talk group.

Beachten Sie, dass Firebase seit Jahren empfohlen hat, abhängig vom Format der uid. Es ist am besten, sie als undurchsichtige Zeichenfolge zu behandeln, die den Benutzer identifiziert.