ios - Firebase 3.x - Facebook 登录

标签 ios swift facebook firebase firebase-authentication

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

最佳答案

在你成功登录 facebook 并取回用户数据后......你必须添加 firebase 身份验证之类的东西

 @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!")

            }
          })
        }
   })
}

关于ios - Firebase 3.x - Facebook 登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36451070/

相关文章:

ios - 具有不同数量图像的动态 UITableView

android - facebook 登录后,如何从 viewpager 转到另一个 Activity ?

ios - 为什么 NSManagedObjectContext Queue 在主线程上执行?

ios - Swift 中的自定义相机和裁剪图像

ios - 在没有 App Store ID 的情况下测试 iOS 'Deep Linking'

ios - 如何在 Swift 中缓存 double 数组

swift - 错误 : cannot invoke 'onNext' with an argument list of type '(String)' RxSwift

ios - 按下后按钮从底部出来

ios - GKPeerPickerController 已弃用

ios - 如何在按下按钮时转到 tableView 的顶部