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!") } }) } }) }
- Firebase 3.2.0 – 创build用户的内部错误
- 有没有可能从一个网页(而不是一个Web应用程序)调用本机ios Facebooklogin对话框?
- 需要Firebase重新validation
- 从unauth切换到开发人员身份validation的authentication用户 – AWS iOS SDK
- 如何让Rails告诉用户login的移动应用程序?
- 读取Firebase身份validation错误(Firebase 3.x和Swift)
- 会话过期devise模式
- 如何在Firebase中pipe理用户的不同身份validation
- 我可以在iPhone应用程序上使用Facebook身份validation服务器端stream程,并仍然有客户端的交互?