2016-06-13 114 views
0

Firebase 2.5.1,我曾经这样做,这是工作:火力地堡3.X - Facebook的登录

@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 
        } 
       }) 
      } 
     }) 
+0

in else part ... add this stuff ...'if facebookError!= nil { print(“Facebook登录失败。错误\(Facebook错误)“) } else if facebookResult.isCancelled {”Facebook登录被取消。“) } else {let credential ...}' –

回答

2

在成功与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!") 

      } 
      }) 
     } 
    }) 
} 
+0

'您的firebase认证内容'否则,或者你的意思是让'凭证...'的东西? – senty

+0

检查上面编辑的答案....是的,你需要提供Firebase身份验证的东西 –