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