Я работаю над проектом в Swift
с различными методами аутентификации (электронная почта / пароль, Facebook и Google) с Firebase
Теперь я нахожу много проблем, когда пользователь, который создал учетную запись в приложении, создает другую с помощью Facebook или Google ..
С Google кажется, что идентификатор пользователя не изменяется, но только меняет пароль , который он установил при регистрации в приложении
(это первая проблема .. Я бы не хотел, чтобы при входе в Google менялся пароль пользователя)
с Facebook Вместо этого, если я вхожу в систему с помощью Google, а затем вхожу в систему с помощью Facebook, регистрация не выполняется, поскольку он находит другого пользователя с таким же адресом электронной почты , и это вторая проблема ..
Я много читал в Интернете, но я не смог точно понять, как выполнить отдельные шаги для подключения Facebook / Google avvoint к учетная запись уже существует в приложение, созданное с использованием метода email / password ...
Я также видел много обсуждений здесь о стековере и документации Firebase
, но я просто могу ' не понимаю ...
Есть ли кто-нибудь, у кого была такая же проблема или кто знает, как ее решить, объясняя шаги кода шаг за шагом? может быть, с некоторыми примерами ...
Я благодарю всех, кто может мне помочь
Это мой гугл-вход в реализацию
//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)
}
}
. На данный момент рекомендуется активировать метод доступа "Несколько учетных записей на один адрес электронной почты" , чтобы иметь одну учетную запись для каждого провайдера. или это угроза безопасности?