Подключите свое приложение к 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!');
}
});
События запускаются, когда происходит следующее:
- Сразу после регистрации слушателя.
- Когда пользователь вошел в систему.
- Когда текущий пользователь вышел из системы.
- При изменении токена текущего пользователя.
- Пользователь входит в систему или повторно проходит проверку подлинности после изменения настраиваемых утверждений. Выданный в результате идентификационный токен будет содержать последние заявки.
- Существующий сеанс пользователя обновляет свой токен идентификатора после истечения срока действия старого токена.
- Токен идентификатора принудительно обновляется путем вызова
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);
Следующие шаги
Изучите руководства по входу и регистрации пользователей с помощью поддерживаемых служб идентификации и аутентификации.