Как вы связываете учетные записи firebase в firebase_auth 0.11.1 во флаттере? - PullRequest
1 голос
/ 22 мая 2019

Я успешно реализовал входы в Google и Facebook для Flutter, используя firebase_auth 0.11.0. Мне нужно реализовать функцию связывания аккаунтов для аккаунтов с одинаковым адресом электронной почты.

Future<FirebaseUser> _signInWithGoogle() async {
  final GoogleSignInAccount googleUser = await _googleSignIn.signIn();
  final GoogleSignInAuthentication googleAuth = await googleUser.authentication;

  final AuthCredential credential = GoogleAuthProvider.getCredential(
  accessToken: googleAuth.accessToken,
  idToken: googleAuth.idToken,
);

final FirebaseUser user = await _auth.signInWithCredential(credential);

Как / где вы обнаруживаете ошибку Firebase (аутентификация / учетная запись существует с разными учетными данными), что учетная запись является дубликатом электронной почты и, следовательно, требует функции linkwithcredential? Я пытался поймать ошибку на signInWithCredential и _signInWithGoogle() выше, но безрезультатно.

На основе приведенного здесь примера:

https://github.com/flutter/plugins/blob/06256967e494e6d719023a249c8bdaae4b3ae065/packages/firebase_auth/test/firebase_auth_test.dart

FirebaseUser user = await auth.currentUser(); user = await user.linkWithCredential(credential);

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

Редактировать: для ясности могу ли я связать учетные записи, когда существует только одна учетная запись / сеанс? Например, поток должен быть, войти с Facebook, поймать (ERROR_ACCOUNT_EXISTS_WITH_DIFFERENT_CREDENTIAL), а затем ссылку на Google.

Ответы [ 2 ]

0 голосов
/ 22 мая 2019

Основываясь на этой информации: Связывание нескольких провайдеров авторизации с Firebase при входе в систему

(если это все еще верно), мой поток недоступен, то есть вы не можете связать аккаунты без входа в системув первую учетную запись Firebase, например, войдите в Google, затем войдите в систему и связывайтесь с Facebook.

Нужный поток пользователей должен быть обеспечен путем включения нескольких учетных записей для одной и той же электронной почты.Хотя это создает дополнительные проблемы, второй пользователь учетной записи firebase FirebaseUser user не содержит адрес электронной почты, user.email - это null.Хотя у user.providerData есть электронная почта.

0 голосов
/ 22 мая 2019

Получить список идентификаторов провайдера для текущего пользователя, если у него есть FB, но нет Google, тогда Google может быть связан с ним

List<UserInfo> providerList = _auth.currentUser().providerData;


// Захватить ошибку для входа с учетными данными, проверить тип ошибки, действовать /// Возможные ошибки:

  • ERROR_INVALID_CREDENTIAL - Если учетные данные искажены или срок их действия истек.
  • ERROR_USER_DISABLED - если пользователь был отключен (например, в консоли Firebase)
  • ERROR_ACCOUNT_EXISTS_WITH_DIFFERENT_CREDENTIAL - если учетная запись с адресом электронной почты, указанным Google, уже существует. Решите этот случай, вызвав [fetchSignInMethodsForEmail], а затем попросив пользователя войти в систему, используя один из них. Эта ошибка будет возникать только в том случае, если в консоли Firebase включен параметр «Одна учетная запись на адрес электронной почты» (рекомендуется).
  • ERROR_OPERATION_NOT_ALLOWED - указывает, что учетные записи Google не включены.
  • ERROR_INVALID_ACTION_CODE - Если код действия в ссылке искажен, срок его действия истек или уже использовался.

final onError = (exception, stacktrace) { /*ERROR HANDLING*/ };

final FirebaseUser user = await _auth.signInWithCredential(credential).catchError(onError);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...