Вы можете разрешить пользователям входить в ваше приложение с использованием нескольких поставщиков аутентификации, привязав учётные данные поставщика аутентификации к существующей учётной записи. Пользователи идентифицируются по одному и тому же идентификатору пользователя Firebase независимо от поставщика аутентификации, который они использовали для входа. Например, пользователь, вошедший с паролем, может привязать учётную запись Google и в дальнейшем использовать любой из этих методов. Или же анонимный пользователь может привязать учётную запись Facebook, а затем войти через Facebook, чтобы продолжить использовать ваше приложение.
Прежде чем начать
Добавьте в свое приложение поддержку двух или более поставщиков аутентификации (возможно, включая анонимную аутентификацию).
Свяжите учетные данные поставщика аутентификации с учетной записью пользователя
Чтобы связать учетные данные поставщика аутентификации с существующей учетной записью пользователя:
- Выполните вход пользователя с использованием любого провайдера или метода аутентификации. 
- Завершите процесс входа для нового поставщика аутентификации, включая вызов одного из методов - signInWith(не включая его). Например, получите токен Google ID, токен доступа Facebook или адрес электронной почты и пароль пользователя.
- Получите объект - Credentialдля нового поставщика аутентификации:- // Google Sign-in final credential = GoogleAuthProvider.credential(idToken: idToken); // Email and password sign-in final credential = EmailAuthProvider.credential(email: emailAddress, password: password); // Etc.
- Передайте объект - Credentialметоду- linkWithCredential()вошедшего в систему пользователя:- try { final userCredential = await FirebaseAuth.instance.currentUser ?.linkWithCredential(credential); } on FirebaseAuthException catch (e) { switch (e.code) { case "provider-already-linked": print("The provider has already been linked to the user."); break; case "invalid-credential": print("The provider's credential is not valid."); break; case "credential-already-in-use": print("The account corresponding to the credential already exists, " "or is already linked to a Firebase User."); break; // See the API reference for the full list of error codes. default: print("Unknown error."); } ```
 Если вызов linkWithCredential() выполнен успешно, пользователь теперь может войти в систему, используя любого связанного поставщика аутентификации, и получить доступ к тем же данным Firebase. 
Отключить поставщика аутентификации от учетной записи пользователя
Вы можете отключить провайдера аутентификации от учетной записи, и пользователь больше не сможет войти в систему с помощью этого провайдера.
 Чтобы отвязать провайдера аутентификации от учётной записи пользователя, передайте его идентификатор методу unlink() . Идентификаторы провайдеров аутентификации, связанных с пользователем, можно получить из свойства providerData объекта User .
try {
  await FirebaseAuth.instance.currentUser?.unlink(providerId);
} on FirebaseAuthException catch (e) {
  switch (e.code) {
    case "no-such-provider":
      print("The user isn't linked to the provider or the provider "
          "doesn't exist.");
      break;
    default:
      print("Unknown error.");
  }
}
Поиск неисправностей
Если при попытке связать несколько учетных записей у вас возникли ошибки, см. документацию по подтвержденным адресам электронной почты .