Подключите ваше приложение к Firebase.
Установите и инициализируйте SDK Firebase для 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 или разрабатываете прототипы дизайна пользовательского интерфейса входа в систему, возможность работать локально без развертывания работающих сервисов может быть отличной идеей.
Эмулятор аутентификации является частью пакета локальных эмуляторов (Local Emulator Suite), который позволяет вашему приложению взаимодействовать с эмулируемым содержимым базы данных и конфигурацией, а также, при необходимости, с эмулируемыми ресурсами проекта (функциями, другими базами данных и правилами безопасности).
Использование эмулятора аутентификации включает всего несколько шагов:
Добавление строки кода в конфигурацию тестирования вашего приложения для подключения к эмулятору.
В корневом каталоге вашего локального проекта выполните
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 , которое вы сможете перехватить и обработать в коде вашего приложения.
Сохраняющееся состояние аутентификации
SDK Firebase для всех платформ обеспечивают встроенную поддержку сохранения состояния аутентификации пользователя при перезапуске приложения или перезагрузке страницы.
На нативных платформах, таких как 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);
Следующие шаги
Ознакомьтесь с руководствами по входу в систему и регистрации пользователей с использованием поддерживаемых служб идентификации и аутентификации.