Firebase 3.x – Facebooklogin

Firebase 2.5.1 ,我曾经这样做过,它正在工作:

 @IBAction func facebookLoginDidTouch(sender: AnyObject) { let facebookLogin = FBSDKLoginManager() facebookLogin.logInWithReadPermissions(["public_profile", "email"], fromViewController: self, 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 myRootRef.authWithOAuthProvider("facebook", token: accessToken, withCompletionBlock: { error, authData in if error != nil { print("Login failed. \(error)") } else { print("Logged in!") let newUser = [ "provider": user.provider, "imageUrl": user!.providerData["profileImageURL"] as String, // etc ] } }) } }) } 

现在我正在尝试在Firebase 3.x实现这一点。 然而,我很困惑我应该在哪里放置权限和东西

这是我到目前为止所尝试的

 @IBAction func facebookLoginDidTouch(sender: AnyObject) { let facebookLogin = FBSDKLoginManager() let credential = FIRFacebookAuthProvider.credentialWithAccessToken(FBSDKAccessToken.currentAccessToken().tokenString) FIRAuth.auth()?.signInWithCredential(credential) { (user, error) in if error != nil { print("Login failed. \(error)") } else { print("Logged in!") let newUser = [ "provider": user.provider, "imageUrl": user!.providerData["profileImageURL"] as String ] } }) } 

更新:

  facebookLogin.logInWithReadPermissions(["public_profile", "email"], fromViewController: self, handler: { (facebookResult, facebookError) -> Void in if facebookError != nil { print("Facebook login failed. Error \(facebookError)") } else if facebookResult.isCancelled { print("Facebook login was cancelled.") } else { // your firebase authentication stuff.. let credential = FIRFacebookAuthProvider.credentialWithAccessToken(FBSDKAccessToken.currentAccessToken().tokenString) FIRAuth.auth()?.signInWithCredential(credential) { (user, error) in if error != nil { print("Login failed. \(error)") } else { print("Logged in!") let userID = Helpers.extractUID(user!) let rootRef = FIRDatabase.database().reference() let userRef = rootRef.child("users").child(userID) userRef.observeEventType(.Value, withBlock: { snapshot in if snapshot.value is NSNull { let newUser = [ "providerId": user?.providerID, "displayName": user?.displayName, ] userRef.setValue((newUser as! AnyObject)) // perform segue } }) } }) 

在您成功loginfacebook并获取用户数据之后,您必须添加类似的Firebase身份validation

  @IBAction func facebookLoginDidTouch(sender: AnyObject) { let facebookLogin = FBSDKLoginManager() facebookLogin.logInWithReadPermissions(["public_profile", "email"], fromViewController: self, handler: { (facebookResult, facebookError) -> Void in if facebookError != nil { print("Facebook login failed. Error \(facebookError)") } else if facebookResult.isCancelled { print("Facebook login was cancelled.") } else { // your firebase authentication stuff.. let credential = FIRFacebookAuthProvider.credentialWithAccessToken(FBSDKAccessToken.currentAccessToken().tokenString) FIRAuth.auth()?.signInWithCredential(credential) { (user, error) in if error != nil { print("Login failed. \(error)") } else { print("Logged in!") } }) } }) }