Подключите свое приложение к Firebase
Установите и инициализируйте Firebase SDKs для Flutter, если вы еще этого не сделали.
Добавьте аутентификацию Firebase в свое приложение
Из корня вашего проекта Flutter выполните следующую команду для установки плагина:
flutter pub add firebase_authПосле завершения перестройте свое приложение Flutter:
flutter runИмпортируйте плагин в свой код Dart:
import 'package:firebase_auth/firebase_auth.dart';
Чтобы использовать поставщика аутентификации, необходимо включить его в консоли Firebase . Перейдите на страницу «Способ входа» в разделе «Аутентификация Firebase», чтобы включить вход по электронной почте/паролю и любые другие поставщики идентификации, необходимые для вашего приложения.
(Необязательно) Создание прототипа и тестирование с помощью Firebase Local Emulator Suite
Прежде чем говорить о том, как ваше приложение аутентифицирует пользователей, давайте рассмотрим набор инструментов, которые можно использовать для создания прототипа и тестирования функциональности аутентификации: Firebase Local Emulator Suite. Если вы выбираете между методами и провайдерами аутентификации, пробуете различные модели данных с публичными и приватными данными, используя правила аутентификации и безопасности Firebase, или разрабатываете прототипы интерфейсов входа, возможность работать локально без развертывания реальных сервисов может быть отличным решением.
Эмулятор аутентификации является частью пакета локальных эмуляторов, который позволяет вашему приложению взаимодействовать с эмулируемым содержимым базы данных и конфигурацией, а также, при необходимости, с эмулируемыми ресурсами проекта (функциями, другими базами данных и правилами безопасности).
Использование эмулятора аутентификации включает всего несколько шагов:
Добавление строки кода в тестовую конфигурацию вашего приложения для подключения к эмулятору.
Из корня локального каталога проекта запустите
firebase emulators:start.Использование пользовательского интерфейса Local Emulator Suite для интерактивного прототипирования или REST API эмулятора аутентификации для неинтерактивного тестирования.
Вызовите
useAuthEmulator()чтобы указать адрес и порт эмулятора:Future<void> main() async { WidgetsFlutterBinding.ensureInitialized(); await Firebase.initializeApp(); // Ideal time to initialize await FirebaseAuth.instance.useAuthEmulator('localhost', 9099); //... }
Подробное руководство доступно на странице «Подключение приложения к эмулятору аутентификации» . Подробнее см. во введении к разделу «Local Emulator Suite» .
Теперь давайте продолжим рассматривать аутентификацию пользователей.
Проверить текущее состояние авторизации
Firebase Auth предоставляет множество методов и утилит для интеграции безопасной аутентификации в ваше новое или существующее приложение Flutter. Во многих случаях вам потребуется знать состояние аутентификации пользователя, например, вошел ли он в систему или вышел из нее.
 Firebase Auth позволяет вам подписываться на это состояние в режиме реального времени через Stream . После вызова поток немедленно отправляет событие о текущем состоянии аутентификации пользователя, а затем отправляет последующие события при каждом изменении состояния аутентификации.
Существует три метода прослушивания изменений состояния аутентификации:
 authStateChanges()
 Чтобы подписаться на эти изменения, вызовите метод authStateChanges() в вашем экземпляре FirebaseAuth :
FirebaseAuth.instance
  .authStateChanges()
  .listen((User? user) {
    if (user == null) {
      print('User is currently signed out!');
    } else {
      print('User is signed in!');
    }
  });
События возникают, когда происходит следующее:
- Сразу после регистрации слушателя.
 - Когда пользователь вошел в систему.
 - Когда текущий пользователь вышел из системы.
 
 idTokenChanges()
 Чтобы подписаться на эти изменения, вызовите метод idTokenChanges() в вашем экземпляре FirebaseAuth :
FirebaseAuth.instance
  .idTokenChanges()
  .listen((User? user) {
    if (user == null) {
      print('User is currently signed out!');
    } else {
      print('User is signed in!');
    }
  });
События возникают, когда происходит следующее:
- Сразу после регистрации слушателя.
 - Когда пользователь вошел в систему.
 - Когда текущий пользователь вышел из системы.
 - При изменении токена текущего пользователя.
 
- Пользователь входит в систему или повторно аутентифицируется после изменения пользовательских заявок. Выданный в результате идентификатор будет содержать последние заявки.
 - Текущий сеанс пользователя обновляет свой идентификационный токен после истечения срока действия старого токена.
 -  Идентификатор токена принудительно обновляется путем вызова 
FirebaseAuth.instance.currentUser.getIdTokenResult(true). 
Более подробную информацию см. в разделе Распространение пользовательских заявок на клиента.
 userChanges()
 Чтобы подписаться на эти изменения, вызовите метод userChanges() в экземпляре FirebaseAuth :
FirebaseAuth.instance
  .userChanges()
  .listen((User? user) {
    if (user == null) {
      print('User is currently signed out!');
    } else {
      print('User is signed in!');
    }
  });
События возникают, когда происходит следующее:
- Сразу после регистрации слушателя.
 - Когда пользователь вошел в систему.
 - Когда текущий пользователь вышел из системы.
 - При изменении токена текущего пользователя.
 -  При вызове следующих методов, предоставляемых 
FirebaseAuth.instance.currentUser:-  
reload() -  
unlink() -  
updateEmail() -  
updatePassword() -  
updatePhoneNumber() -  
updateProfile() 
 -  
 
 idTokenChanges() , userChanges() и authStateChanges() также не сработают, если вы отключите или удалите User с помощью Firebase Admin SDK или консоли Firebase. Вам придётся принудительно перезагрузить его с помощью FirebaseAuth.instance.currentUser.reload() , что приведёт к исключению user-disabled или user-not-found , которое можно перехватить и обработать в коде приложения.
Сохранение состояния аутентификации
Пакеты Firebase SDK для всех платформ обеспечивают встроенную поддержку, гарантирующую сохранение состояния аутентификации пользователя при перезапуске приложения или перезагрузке страницы.
На таких платформах, как Android и iOS, это поведение не настраивается, и состояние аутентификации пользователя будет сохраняться на устройстве между перезапусками приложения. Пользователь может очистить кэшированные данные приложения в настройках устройства, что приведет к удалению любого сохранённого состояния.
 На веб-платформах состояние аутентификации пользователя хранится в IndexedDB . Вы можете изменить настройки сохранения для локального хранения данных с помощью Persistence.LOCAL . При необходимости вы можете изменить это поведение по умолчанию, чтобы сохранять только состояние аутентификации для текущего сеанса или не сохранять его вообще. Чтобы настроить эти параметры, вызовите следующий метод FirebaseAuth.instanceFor(app: Firebase.app(), persistence: Persistence.LOCAL); . Вы по-прежнему можете обновить настройки сохранения для каждого экземпляра Auth с помощью setPersistence(Persistence.NONE) .
// Disable persistence on web platforms. Must be called on initialization:
final auth = FirebaseAuth.instanceFor(app: Firebase.app(), persistence: Persistence.NONE);
// To change it after initialization, use `setPersistence()`:
await auth.setPersistence(Persistence.LOCAL);
Следующие шаги
Изучите руководства по входу в систему и регистрации пользователей с использованием поддерживаемых служб идентификации и аутентификации.