Facebookを使用してFirebaseアカウントにログインできるようにする方法を設定しようとしています。アカウントを初めて作成するユーザーであれば、すべて正常に動作しますが、ユーザーが以前にアカウントを作成してアカウントにログインしようとすると、問題が始まる場所になります。ときにコードFirebaseに「既存のメール」エラーが表示される
FIRAuth.auth()?.signIn(with: credential, completion: {(user, error)
ランは、私はそれは彼らがサインインしようとしているアカウントであっても、メールが既に使用中であるというエラーを取得します。
私の全体のコードはここにある:
func handleCustomFBLogin() {
FBSDKLoginManager().logIn(withReadPermissions: ["email"], from: self) { (result, err) in
if err != nil {
print("Error loggin in is \(err)")
//self.facebookanimateIn()
} else if (result?.isCancelled)!{
print("The user cancelled loggin in ")
} else {
let credential = FIRFacebookAuthProvider.credential(withAccessToken: FBSDKAccessToken.current().tokenString)
let graphRequest : FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: ["fields": "id, name, email"])
graphRequest.start(completionHandler: { (connection, result, error) -> Void in
if ((error) != nil) {
print("Error: \(error)")
} else {
let data:[String:AnyObject] = result as! [String: AnyObject]
let facebookName:NSString = data["name"] as! NSString
let facebookEmail = data["email"] as Any
let userId = data["id"] as! NSString
let facebookProfileUrl = "http://graph.facebook.com/\(userId)/picture?type=large"
let facebookAge = data["age_range"] as Any
let password = "needToPutRandomizedPasswordInHere" as String
FIRAuth.auth()?.createUser(withEmail: facebookEmail as! String, password: password, completion: {result, error in
if error != nil{
//user has account, they just need to sign in
FIRAuth.auth()?.signIn(with: credential, completion: {(user, error) in
if error != nil{
print(error.debugDescription)
return
}
let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
let vc: UINavigationController = storyboard.instantiateViewController(withIdentifier: "checker") as! UINavigationController
self.present(vc, animated: true, completion: nil)
// ref.removeObserver(withHandle: handle)
})
} else {
//user does not have an account and they need to create one
guard let uid = result?.uid else{
return
}
print("user created as \(uid)")
let val = "0"
let number = (val as NSString).integerValue
let ref = FIRDatabase.database().reference()
let usersReference = ref.child("Users").child(uid)
let values = [""] as [String : Any];
usersReference.updateChildValues(values, withCompletionBlock: { (err,ref) in
if err != nil {
print(err.debugDescription)
return}})
print("Save the user successfully into Firebase database")
let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
let vc: UINavigationController = storyboard.instantiateViewController(withIdentifier: "checker") as! UINavigationController
self.present(vc, animated: true, completion: nil)
}
})
}
})
}
}
}
ある資格でログインする際にユーザーを作成する必要はありませんトークン – Callam
私はユーザーが以前にアカウントを作成したかどうかを確認するためにユーザーを作成しています。だからエラーが発生した場合、ユーザーは既に@Callamのアカウントを持っていることを示しています – notJenny