刚开始我已经看过很多例子,但似乎找不到解决方案。好吧,我以为我做到了,但它似乎不起作用。
我想做的是使用 Facebook 的 Firebase 身份验证登录方法,顺便说一句。我的问题是当 facebook 方法抛出电子邮件/凭据已存在的错误时,我想链接密码 auth 凭据和 facebook auth 凭据。我读了here我可以使用 error.email
但它没有给我访问 email.error
的选项。我可能遗漏了一些东西,我花了很多时间试图弄明白。
这是我的代码:
func signInFacebookUser() {
let fbLoginManager = FBSDKLoginManager()
fbLoginManager.logIn(withReadPermissions: ["public_profile", "email"], from: self) { (result, error) in
if let error = error {
self.errorMessagePopUp(title: "Failed to login", message: error)
return
}
guard let accessToken = FBSDKAccessToken.current() else {
print("Failed to get access token")
return
}
let credential = FacebookAuthProvider.credential(withAccessToken: accessToken.tokenString)
Auth.auth().signIn(with: credential, completion: { (user, error) in
if let error = error {
let errCode = AuthErrorCode(rawValue: error._code)!
switch errCode {
case .accountExistsWithDifferentCredential:
// somehow obtain email right here.
self.showSigninForm(attributes: self.attributes(), style: .light)
return
default:
return
}
}
self.performSegue(withIdentifier: "signInBtnPressed", sender: nil)
})
}
}
最佳答案
这适用于我的 Swift4
@objc func loginButtonClicked() { var alertController = UIAlertController() let loginManager = LoginManager() loginManager.logIn(readPermissions: [ReadPermission.email], >viewController: self, completion: {loginResult in switch loginResult { case .failed(let error): print(error) case .cancelled: print("User cancelled login.") case .success(_, _, let accessToken): print(accessToken) } }) }
func getDataUser() {
let request = GraphRequest(graphPath: "me?fields=first_name,last_name,email",
parameters:[:],
httpMethod: .GET)
request.start { httpResponse, result in
switch result {
case .success(let response): do {
print("Graph Request Succeeded: \(response)")
let dicval = response.dictionaryValue
let email = dicval?.keys
print("Graph Request Succeeded: \(String(describing: email))")
}
case .failed(let error):
print("Graph Request Failed: \(error)")
}
}
}
}
关于ios - Swift - 从 facebook 登录中获取错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50558802/