Управление пользователями в 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 с помощью команды auth:import интерфейсе командной строки Firebase. Например:

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