Firebase 3.x - Facebook登录 [英] Firebase 3.x - Facebook Login
本文介绍了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
]
}
})
}
$ c
$ 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屋!
查看全文