Управление пользователями в Firebase

Создать пользователя

Вы создаете нового пользователя в своем проекте Firebase четырьмя способами:

Вы также можете создать новых пользователей с аутентификацией по паролю в разделе «Аутентификация» консоли Firebase на странице «Пользователи».

Получить профиль пользователя

Чтобы получить информацию о профиле пользователя, используйте свойства User . Есть три способа получить объект User , представляющий текущего пользователя:

  • authStateChanges , idTokenChanges и userChanges : ваши слушатели получат текущий User или null , если ни один пользователь не аутентифицирован:

    FirebaseAuth.instance
      .authStateChanges()
      .listen((User? user) {
        if (user != null) {
          print(user.uid);
        }
      });
    

    Когда приложение запускается, событие запускается после восстановления учетных данных пользователя (если они есть) из локального хранилища, а это означает, что ваши прослушиватели всегда вызываются при инициализации пользовательского состояния. Затем при каждом изменении состояния проверки подлинности будет возникать новое событие с обновленным состоянием пользователя.

    Прислушиваясь к состоянию аутентификации, вы можете создать пользовательский интерфейс, реагирующий на эти изменения в состоянии аутентификации.

  • Объект UserCredential , возвращаемый методами аутентификации ( signIn ): объект UserCredential имеет свойство user с текущим User :

    final userCredential =
        await FirebaseAuth.instance.signInWithCredential(credential);
    final user = userCredential.user;
    print(user?.uid);
    
  • Свойство currentUser экземпляра FirebaseAuth : если вы уверены, что пользователь в данный момент вошел в систему, вы можете получить доступ к User из свойства currentUser :

    if (FirebaseAuth.instance.currentUser != null) {
      print(FirebaseAuth.instance.currentUser?.uid);
    }
    

    currentUser может быть null по двум причинам:

    • Пользователь не авторизован.
    • Объект авторизации не завершил инициализацию. Если вы используете прослушиватель для отслеживания состояния входа пользователя, вам не нужно обрабатывать этот случай.

Получить информацию о профиле конкретного поставщика услуг пользователя

Чтобы получить информацию профиля, полученную от поставщиков входа, связанных с пользователем, используйте свойство providerData . Например:

if (user != null) {
    for (final providerProfile in user.providerData) {
        // ID of the provider (google.com, apple.com, etc.)
        final provider = providerProfile.providerId;

        // UID specific to the provider
        final uid = providerProfile.uid;

        // Name, email address, and profile photo URL
        final name = providerProfile.displayName;
        final emailAddress = providerProfile.email;
        final profilePhoto = providerProfile.photoURL;
    }
}

Обновить профиль пользователя

Вы можете обновить основную информацию о профиле пользователя — отображаемое имя пользователя и URL-адрес фотографии профиля — с помощью методов update . Например:

await user?.updateDisplayName("Jane Q. User");
await user?.updatePhotoURL("https://example.com/jane-q-user/profile.jpg");

Установить адрес электронной почты пользователя

Вы можете установить адрес электронной почты пользователя с помощью updateEmail() . Например:

await user?.updateEmail("janeq@example.com");

Отправить пользователю электронное письмо с подтверждением

Вы можете отправить электронное письмо с подтверждением адреса пользователю с помощью sendEmailVerification() . Например:

await user?.sendEmailVerification();

Вы можете настроить шаблон электронной почты, который используется в разделе «Аутентификация» консоли Firebase на странице «Шаблоны электронной почты». См. Шаблоны электронной почты в Справочном центре Firebase.

Также можно передать состояние через URL-адрес продолжения , чтобы перенаправить обратно в приложение при отправке письма с подтверждением.

Кроме того, вы можете локализовать подтверждающее электронное письмо, обновив код языка в экземпляре Auth перед отправкой электронного письма. Например:

await FirebaseAuth.instance.setLanguageCode("fr");
await user?.sendEmailVerification();

Установить пароль пользователя

Вы можете установить пароль пользователя с помощью updatePassword() . Например:

await user?.updatePassword(newPassword);

Отправить электронное письмо для сброса пароля

Вы можете отправить электронное письмо для сброса пароля пользователю с помощью sendPasswordResetEmail() . Например:

await FirebaseAuth.instance
    .sendPasswordResetEmail(email: "user@example.com");

Вы можете настроить шаблон электронной почты, который используется в разделе «Аутентификация» консоли Firebase на странице «Шаблоны электронной почты». См. Шаблоны электронной почты в Справочном центре Firebase.

Также можно передать состояние через URL-адрес продолжения , чтобы перенаправить обратно в приложение при отправке электронного письма для сброса пароля.

Кроме того, вы можете локализовать электронное письмо для сброса пароля, обновив код языка в экземпляре Auth перед отправкой электронного письма. Например:

await FirebaseAuth.instance.setLanguageCode("fr");

Вы также можете отправлять электронные письма для сброса пароля из консоли Firebase.

Удалить пользователя

Вы можете удалить учетную запись пользователя с помощью метода delete() . Например:

await user?.delete();

Вы также можете удалить пользователей из раздела «Аутентификация» консоли Firebase на странице «Пользователи».

Повторная аутентификация пользователя

Некоторые действия, связанные с безопасностью, такие как удаление учетной записи , установка основного адреса электронной почты и изменение пароля , требуют, чтобы пользователь недавно вошел в систему. Если вы выполняете одно из этих действий, а пользователь вошел в систему слишком давно, действие завершается с ошибкой и вызывает FirebaseAuthException с кодом requires-recent-login . В этом случае повторите аутентификацию пользователя, получив новые учетные данные для входа от пользователя и передав учетные данные для reauthenticate . Например:

// Prompt the user to re-provide their sign-in credentials.
// Then, use the credentials to reauthenticate:
await user?.reauthenticateWithCredential(credential);

Импорт учетных записей пользователей

Вы можете импортировать учетные записи пользователей из файла в проект Firebase с помощью команды Firebase CLI auth:import . Например:

firebase auth:import users.json --hash-algo=scrypt --rounds=8 --mem-cost=14