Firebase 3.x - Facebook登录 [英] Firebase 3.x - Facebook Login

查看:136
本文介绍了Firebase 3.x - Facebook登录的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

  @IBAction func facebookLoginDidTouch(sender:AnyObject){

let facebookLogin = FBSDKLoginManager()

facebookLogin.logInWithReadPermissions([public_profile,email ),fromViewController:self,handler:{
(facebookResult,facebookError) - >无效
if facebookError!= nil {
print(Facebook登录失败,错误\(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

$ b $)



code $ pre >

现在我正试图在 Firebase 3.x 中实现这个功能。然而,我很困惑我应该把权限和东西放在哪里

这是我迄今为止所尝试的



<$ p $ b $ func facebookLoginDidTouch(sender:AnyObject){

let facebookLogin = FBSDKLoginManager()

let credential = FIRFacebookAuthProvider.credentialWithAccessToken(FBSDKAccessToken。如果错误!= nil {
print(LoginAccessToken()。tokenString)

FIRAuth.auth()?。signInWithCredential(凭证){(用户,错误)
失败。\(错误))
} else {
print(Logged in!)

let newUser = [
provider:user。提供者,
imageUrl:user!.providerData [profileImageURL] as String
]
}
})
}

$ b

更新:

  facebookLogin.logInWithReadPermissions([public_profile,email],fromViewController:self,handler:{
(fac ebookResult,facebookError) - >无效
if facebookError!= nil {
print(Facebook登录失败。错误\(facebookError))
} else if facebookResult.isCancelled {
print(Facebook )
} else {
//你的firebase认证的东西..

let credential = FIRFacebookAuthProvider.credentialWithAccessToken(FBSDKAccessToken.currentAccessToken()。tokenString)

FIRAuth.auth()?。signInWithCredential(凭证){(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
如果sn apshot.value是NSNull {
let newUser = [
providerId:user?.providerID,
displayName:user?.displayName,
]
userRef .setValue((newUser as! AnyObject))
//执行segue
}
})
}
})


解决方案

成功登录Facebook并获取用户数据后,您必须添加Firebase身份验证资料,如


$ b

  @IBAction func facebookLoginDidTouch(sender:AnyObject){

let facebookLogin = FBSDKLoginManager()

facebookLogin.logInWithReadPermissions([public_profile,email],fromViewController:self,handler:{
(facebookResult,facebookError) - >无效
if facebookError!= nil {
print (Facebook登录失败。错误\(facebookError))
} else if facebookResult.isCancelled {
print(Facebook登录被取消。)
} else {
//你的firebase认证的东西..

让凭证= FIRFac ebookAuthProvider.credentialWithAccessToken(FBSDKAccessToken.currentAccessToken()。tokenString)

FIRAuth.auth()?。signInWithCredential(凭证){(user,error)in
if error!= nil {
print(登录失败。 \(error))
} else {
print(Logged in!)

}
})
}
})
}


InFirebase 2.5.1, I used to do this, and it was working:

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

Now I am trying to achieve this in Firebase 3.x. However, I got confused on where I should place permissions and stuff

This is what I tried so far

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

Update:

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

解决方案

After you successfully login with facebook and get user data back ... you have to add firebase authentication stuff like

 @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.x - Facebook登录的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆