Обновите анонимного пользователя Firebase, используя Email и пароль - PullRequest
0 голосов
/ 27 апреля 2020

Люди могут войти в мое приложение анонимно:

FirebaseAuth.instance.signInAnonymously();

Оказавшись внутри, у них есть небольшой индикатор, который напоминает им, если они хотят иметь возможность сохранять свои данные на телефоны, им нужно будет войти в систему. Для аутентификации Google, которая выглядит следующим образом:

Future<void> anonymousGoogleLink() async {
  try {
    final user = await auth.currentUser();
    final credential = await googleCredential();

    await user.linkWithCredential(credential);
  } catch (error) {
    throw _errorToHumanReadable(error.toString());
  }
}

, где googleCredential:


Future<AuthCredential> googleCredential() async {
  final googleUser = await _googleSignIn.signIn();

  if (googleUser == null) throw 'User Canceled Permissions';

  final googleAuth = await googleUser.authentication;
  final signInMethods = await auth.fetchSignInMethodsForEmail(
    email: googleUser.email,
  );

  if (signInMethods.isNotEmpty && !signInMethods.contains('google.com')) {
    throw 'An account already exists with the same email address but different sign-in credentials. Sign in using a provider associated with this email address.';
  }

  return GoogleAuthProvider.getCredential(
    accessToken: googleAuth.accessToken,
    idToken: googleAuth.idToken,
  );
}

Теперь я хотел бы сделать то же самое, но вместо этого связать текущий анонимный аккаунт. с аутентификацией по электронной почте и паролю.

РЕДАКТИРОВАТЬ:

Нашел возможное решение при написании этого. Оставляя для других, чтобы увидеть. Не стесняйтесь поправлять меня.

1 Ответ

2 голосов
/ 27 апреля 2020

На объекте FirebaseUser метод updatePassword имеет следующую строку do c:

/// Updates the password of the user.
///
/// Anonymous users who update both their email and password will no
/// longer be anonymous. They will be able to log in with these credentials.
/// ...

Вы можете просто обновить оба, и тогда они будут аутентифицированы как обычный пользователь , Для меня это выглядело так:

Future<void> anonymousEmailLink({
  @required FirebaseUser user,
  @required String email,
  @required String password,
}) async {
  try {
    await Future.wait([
      user.updateEmail(email),
      user.updatePassword(password),
    ]);
  } catch (error) {
    throw _errorToHumanReadable(error.toString());
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...