Подключите свое приложение к Firebase
Установите и инициализируйте Firebase SDK для Flutter, если вы еще этого не сделали.
Добавьте аутентификацию Firebase в свое приложение
Из корня вашего проекта Flutter выполните следующую команду, чтобы установить плагин:
flutter pub add firebase_auth
После завершения перестройте приложение Flutter:
flutter run
Импортируйте плагин в свой код Dart:
import 'package:firebase_auth/firebase_auth.dart';
Чтобы использовать поставщика аутентификации, вам необходимо включить его в консоли Firebase . Перейдите на страницу «Метод входа» в разделе «Аутентификация Firebase», чтобы включить вход по электронной почте/паролю и любые другие поставщики удостоверений, которые вы хотите для своего приложения.
(Необязательно) Создайте прототип и протестируйте его с помощью пакета локального эмулятора Firebase.
Прежде чем говорить о том, как ваше приложение выполняет аутентификацию пользователей, давайте представим набор инструментов, которые вы можете использовать для прототипирования и тестирования функций аутентификации: 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!');
}
});
События запускаются, когда происходит следующее:
- Сразу после регистрации слушателя.
- Когда пользователь вошел в систему.
- Когда текущий пользователь вышел из системы.
- При изменении токена текущего пользователя.
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()
-
Постоянное состояние аутентификации
Пакеты 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);
Следующие шаги
Изучите руководства по входу и регистрации пользователей с помощью поддерживаемых служб идентификации и аутентификации.