Приложение My Flutter позволяет выполнять вход по электронной почте + пароль, а также через Google SignIn.
Я хотел бы зарегистрировать пользователя в своей учетной записи через Google SignIn, если они ранее регистрировались с тем же электронным адресом. mail.
Таким образом, поток может выглядеть следующим образом:
- Пользователь автоматически регистрируется анонимно при запуске
- Пользователь входит в систему с учетными данными (электронная почта + пароль) и их анонимная учетная запись связана с этой новой учетной записью
- Пользователь выходит из системы и входит в новую анонимную учетную запись
- Пользователь входит в систему с помощью Google SignIn
- Я хотел бы этот пользователь будет связан со своей предыдущей учетной записью Firebase . Анонимный аккаунт из шага 3 должен быть удален.
Вот как я получаю учетные данные Google:
final firebaseUser = await firebaseAuth.currentUser();
final googleUser = await googleSignIn.signIn();
final googleAuth = await googleUser.authentication;
final googleCredential = GoogleAuthProvider.getCredential(
accessToken: googleAuth.accessToken,
idToken: googleAuth.idToken,
);
Затем я проверяю, заходил ли пользователь ранее с паролем:
final providers = await firebaseAuth.fetchSignInMethodsForEmail(
email: googleUser.email);
final signedViaPassword = providers.contains('password');
Когда пользователь уже зарегистрировался только через Google, войдите в систему:
final authResult =
await firebaseAuth.signInWithCredential(googleCredential);
await _updateUserDocumentAfterGoogleSignIn(authResult, googleUser);
return SignInGoogleResult(wasSuccessful: true, newUserCreated: false);
Когда пользователь новый:
logger.logInfo('New user, need to link with anonymous');
final authResult =
await firebaseUser.linkWithCredential(googleCredential);
await _updateUserDocumentAfterGoogleSignIn(authResult, googleUser);
return SignInGoogleResult(wasSuccessful: true, newUserCreated: true);
А теперь я бы хотел обработать случай, когда пользователь уже зарегистрировался с паролем. Я думаю, что должен получить доступ к пользователю Firebase, который зарегистрировался с паролем, и связать его с этой учетной записью Google, но я не знаю, как с этим справиться.