Firebase不会创建Facebook帐户使用Facebook应用程序的用户UID用户ID
问题描述:
我正在开发iOS应用程序,需要用户通过连接其Facebook帐户来创建帐户。一个月前,当我通过自己的Facebook帐户进行测试时,Firebase创建的用户UID格式为“脸书:(脸书应用程序ID)”。这是我想要的。Firebase不会创建Facebook帐户使用Facebook应用程序的用户UID用户ID
但是,最近,无论何时用户通过将他们的Facebook帐户与我的应用连接来创建新的acconut,Firebase都会使用随机字符串创建用户UID。例如:“E9FaL87wRmOKfhen2S6yszhCwtx1”。这可能是因为新的Firebase更新?我应该经历迁移过程吗?
这里是我的帐户创建代码:
@IBAction func facebookAuthAction(sender: AnyObject) {
let facebookLogin = FBSDKLoginManager()
facebookLogin.logInWithReadPermissions(nil, fromViewController: nil, 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
FIREBASE_REF.authWithOAuthProvider("facebook", token: accessToken, withCompletionBlock: { error, authData in
if error != nil {
print("Login failed. \(error)")
} else {
print("Logged in! \(authData)")
NSUserDefaults.standardUserDefaults().setValue(authData.uid, forKey: "uid")
FIREBASE_REF.childByAppendingPath("users").observeEventType(.Value, withBlock: {snapshot in
if snapshot.hasChild(authData.uid) == false {
self.createNewFBUser(authData.uid)
}
})
self.performSegueWithIdentifier("loginSegue", sender: self)
}
})
}
})
}
func createNewFBUser(uid: String) {
var emailAddress:String = ""
var firstName:String = ""
var lastName:String = ""
var pictureURL:String = ""
let parameters = ["fields": "email, first_name, last_name, picture.type(large)"]
FBSDKGraphRequest(graphPath: "me", parameters: parameters).startWithCompletionHandler {(connection, result, error) -> Void in
if error != nil {
print(error)
return
}
if let email = result["email"] as? String {
emailAddress = email
}
if let first_name = result["first_name"] as? String {
firstName = first_name
}
if let last_name = result["last_name"] as? String {
lastName = last_name
}
if let picture = result["picture"] as? NSDictionary, data = picture["data"] as? NSDictionary, url = data["url"] as? String {
pictureURL = url
}
let newUser = [
"provider": "facebook",
"firstName": firstName,
"lastName": lastName,
"email": emailAddress,
"picture": pictureURL
]
FIREBASE_REF.childByAppendingPath("users").childByAppendingPath(uid).setValue(newUser)
}
}
答
当您升级项目到new Firebase Console,您的用户迁移到新的认证后端。
升级后新创建的用户将获得新格式的uid。请参阅此post on the firebase-talk group以了解有关此更改的更多信息,以及何时也将其应用于现有(未升级)的Firebase应用程序。
请注意,Firebase建议不要根据uid
多年的格式。最好将其视为识别用户的不透明字符串。
我认为您应该转移到Firebase的新版本,我认为Google会尽快关闭“旧”Firebase –
* Firebaser * Firebase.com网站将在可预见的未来保持运营。 Firebase 2.x SDK仍将受支持。这就是说:我们希望我们的开发人员能够选择升级到新的Firebase控制台和API。 –
@Dylan:您是否已将此项目升级到新的[Firebase控制台](https://console.firebase.google.com)? –