我正在使用{strong>不同的身份验证方法(电子邮件/密码,facebook和google)和Swift
Firebase
中进行项目开发
现在,当在应用程序中创建帐户的用户使用Facebook或google创建另一个帐户时,我发现很多问题。
对于 Google ,用户ID 似乎没有变化,但是仅更改了他在应用中注册时设置的密码。 / p>
(这是第一个问题。我不希望使用Google登录名更改用户密码)
使用 Facebook ,如果我使用google登录,然后使用facebook登录,则登录失败,因为它找到了另一个具有相同电子邮件的用户,这是第二个问题..
我在网络上阅读了很多书,但我无法确切了解将 Facebook / Google avvoint连接到已经存在的帐户的单个步骤使用电子邮件/密码方法创建的应用...
我在这里也看到了许多关于stackover和Firebase
文档的讨论,但我只是听不懂...
是否有人遇到过我的相同问题,或者知道如何通过逐步解释代码来解决该问题?也许有一些例子...
我感谢能帮助我的每个人
这是我的Google登录实现
//MARK: - GOOGLE Sign In in Firebase
static func signInWithGoogle(user: GIDGoogleUser!, error: Error?) {
if let error = error {
print("\n ------- \n Autenticazione con GOOGLE Fallita:\(error) \n --------\n")
return
}
guard let authentication = user.authentication else { return }
let credential = GoogleAuthProvider.credential(withIDToken: authentication.idToken, accessToken: authentication.accessToken)
Auth.auth().signIn(with: credential) { (result, error) in
if let error = error {
print("\n ------- \n Creazione dell'User in Firebase con Google Fallita: \(error) \n---------\n")
return
}
guard let uid = Auth.auth().currentUser?.uid else { return }
saveUserStatusToKeychain(forKey: AuthKeychainKey.userLoggedIn, userLoggedIn: true)
print(AuthManager.userLoggedIn())
print("\n ------- \n Account Firebase con Google creato con ID:\(uid)) \n ------- \n" )
print(user.profile.name,user.profile.familyName, user.profile.givenName, user.profile.email)
}
}
———-
这是我的Facebook登录实施
static func signInWithFacebook(startController: UIViewController) {
let loginManager = LoginManager()
loginManager.logIn(permissions: [.publicProfile, .email], viewController: startController) { (result) in
switch result {
case .success(granted: _, declined: _, token: _):
guard let authToken = AccessToken.current?.tokenString else { return }
let credential = FacebookAuthProvider.credential(withAccessToken: authToken)
Auth.auth().signIn(with: credential) { (result, err) in
if err != nil {
print(err!)
return
}
print("login with facebook")
// guard Auth.auth().currentUser != nil else { return }
AuthManager.saveUserStatusToKeychain(forKey: AuthKeychainKey.userLoggedIn, userLoggedIn: true)
let navigationController = UINavigationController(rootViewController: HomeController())
navigationController.modalPresentationStyle = .fullScreen
navigationController.modalTransitionStyle = .crossDissolve
startController.present(navigationController, animated: true, completion: nil)
}
print("OK")
case .cancelled: print("Operazione annullata dall'user")
case .failed(let error) : print(error)
}
}
}
//MARK: - User Logout
static func logout() {
do {
try Auth.auth().signOut()
saveUserStatusToKeychain(forKey: AuthKeychainKey.userLoggedIn, userLoggedIn: false)
} catch let signOutError as NSError {
print ("Error signing out: %@", signOutError)
}
}
在这一点上,建议激活访问方法“每个电子邮件地址多个帐户” ,以便为每个提供商使用一个帐户还是存在安全隐患?