Join us in person and online for Firebase Summit on October 18, 2022. Learn how Firebase can help you accelerate app development, release your app with confidence, and scale with ease. Register now

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

Оптимизируйте свои подборки Сохраняйте и классифицируйте контент в соответствии со своими настройками.

Firebase Admin SDK предоставляет API для управления пользователями Firebase Authentication с повышенными привилегиями. API управления пользователями-администраторами дает вам возможность программно выполнять следующие задачи из защищенной серверной среды:

  • Создавайте новых пользователей без какого-либо регулирования или ограничения скорости.
  • Ищите пользователей по различным критериям, таким как uid, адрес электронной почты или номер телефона.
  • Список всех пользователей указанного проекта в пакетном режиме.
  • Получите доступ к метаданным пользователя, включая дату создания учетной записи и дату последнего входа в систему.
  • Удалять пользователей, не запрашивая их существующий пароль.
  • Обновляйте свойства пользователя, включая его пароль, без необходимости входа в систему как пользователь.
  • Проверяйте электронную почту, не выполняя внеплановые действия для проверки электронной почты.
  • Измените адрес электронной почты пользователя без отправки ссылок по электронной почте, чтобы отменить эти изменения.
  • Создайте нового пользователя с номером телефона, не проходя процедуру подтверждения по SMS.
  • Измените номер телефона пользователя, не проходя процедуру подтверждения по SMS.
  • Автономная инициализация пользователей в отключенном состоянии, а затем контроль их включения.
  • Создавайте собственные пользовательские консоли, адаптированные к системе управления пользователями конкретного приложения.

Прежде чем вы начнете

Чтобы использовать API управления пользователями, предоставляемый Firebase Admin SDK, у вас должна быть учетная запись службы. Следуйте инструкциям по установке для получения дополнительной информации о том, как инициализировать Admin SDK.

Получить данные пользователя

Основной способ идентифицировать пользователя — это его uid , уникальный идентификатор этого пользователя. Admin SDK предоставляет метод, который позволяет получать информацию о профилях пользователей по их uid :

Node.js

getAuth()
  .getUser(uid)
  .then((userRecord) => {
    // See the UserRecord reference doc for the contents of userRecord.
    console.log(`Successfully fetched user data: ${userRecord.toJSON()}`);
  })
  .catch((error) => {
    console.log('Error fetching user data:', error);
  });

Ява

UserRecord userRecord = FirebaseAuth.getInstance().getUser(uid);
// See the UserRecord reference doc for the contents of userRecord.
System.out.println("Successfully fetched user data: " + userRecord.getUid());

питон

from firebase_admin import auth

user = auth.get_user(uid)
print('Successfully fetched user data: {0}'.format(user.uid))

Идти

// Get an auth client from the firebase.App
client, err := app.Auth(ctx)
if err != nil {
	log.Fatalf("error getting Auth client: %v\n", err)
}

u, err := client.GetUser(ctx, uid)
if err != nil {
	log.Fatalf("error getting user %s: %v\n", uid, err)
}
log.Printf("Successfully fetched user data: %v\n", u)

С#

UserRecord userRecord = await FirebaseAuth.DefaultInstance.GetUserAsync(uid);
// See the UserRecord reference doc for the contents of userRecord.
Console.WriteLine($"Successfully fetched user data: {userRecord.Uid}");

Этот метод возвращает объект UserRecord для пользователя, соответствующий uid пользователя, предоставленному методу.

Если предоставленный uid не принадлежит существующему пользователю или пользователь не может быть получен по какой-либо другой причине, описанный выше метод выдает ошибку. Полный список кодов ошибок, включая описания и шаги по устранению, см. в разделе Ошибки API аутентификации администратора .

В некоторых случаях у вас будет электронная почта пользователя вместо его uid . Firebase Admin SDK поддерживает поиск информации о пользователе по электронной почте:

Node.js

getAuth()
  .getUserByEmail(email)
  .then((userRecord) => {
    // See the UserRecord reference doc for the contents of userRecord.
    console.log(`Successfully fetched user data: ${userRecord.toJSON()}`);
  })
  .catch((error) => {
    console.log('Error fetching user data:', error);
  });

Ява

UserRecord userRecord = FirebaseAuth.getInstance().getUserByEmail(email);
// See the UserRecord reference doc for the contents of userRecord.
System.out.println("Successfully fetched user data: " + userRecord.getEmail());

питон

from firebase_admin import auth

user = auth.get_user_by_email(email)
print('Successfully fetched user data: {0}'.format(user.uid))

Идти

u, err := client.GetUserByEmail(ctx, email)
if err != nil {
	log.Fatalf("error getting user by email %s: %v\n", email, err)
}
log.Printf("Successfully fetched user data: %v\n", u)

С#

UserRecord userRecord = await FirebaseAuth.DefaultInstance.GetUserByEmailAsync(email);
// See the UserRecord reference doc for the contents of userRecord.
Console.WriteLine($"Successfully fetched user data: {userRecord.Uid}");

Этот метод возвращает объект UserRecord для пользователя, соответствующего предоставленному адресу электронной почты.

Если предоставленный адрес электронной почты не принадлежит существующему пользователю или пользователь не может быть получен по какой-либо другой причине, Admin SDK выдает ошибку. Полный список кодов ошибок, включая описания и шаги по устранению, см. в разделе Ошибки API аутентификации администратора .

В других случаях у вас будет номер телефона пользователя вместо его uid . Firebase Admin SDK поддерживает поиск информации о пользователе по номеру телефона:

Node.js

getAuth()
  .getUserByPhoneNumber(phoneNumber)
  .then((userRecord) => {
    // See the UserRecord reference doc for the contents of userRecord.
    console.log(`Successfully fetched user data:  ${userRecord.toJSON()}`);
  })
  .catch((error) => {
    console.log('Error fetching user data:', error);
  });

Ява

UserRecord userRecord = FirebaseAuth.getInstance().getUserByPhoneNumber(phoneNumber);
// See the UserRecord reference doc for the contents of userRecord.
System.out.println("Successfully fetched user data: " + userRecord.getPhoneNumber());

питон

from firebase_admin import auth

user = auth.get_user_by_phone_number(phone)
print('Successfully fetched user data: {0}'.format(user.uid))

Идти

u, err := client.GetUserByPhoneNumber(ctx, phone)
if err != nil {
	log.Fatalf("error getting user by phone %s: %v\n", phone, err)
}
log.Printf("Successfully fetched user data: %v\n", u)

С#

UserRecord userRecord = await FirebaseAuth.DefaultInstance.GetUserByPhoneNumberAsync(phoneNumber);
// See the UserRecord reference doc for the contents of userRecord.
Console.WriteLine($"Successfully fetched user data: {userRecord.Uid}");

Этот метод возвращает объект UserRecord для пользователя, соответствующего предоставленному номеру телефона.

Если предоставленный номер телефона не принадлежит существующему пользователю или пользователь не может быть получен по какой-либо другой причине, Admin SDK выдает ошибку. Полный список кодов ошибок, включая описания и шаги по устранению, см. в разделе Ошибки API аутентификации администратора .

Массовое получение пользовательских данных

Firebase Admin SDK также позволяет получать список пользователей на основе предоставленных вами идентификаторов. Вы можете идентифицировать пользователей по их идентификатору пользователя, электронной почте или номеру телефона. За один вызов можно передать не более 100 идентификаторов. Идентификаторы могут содержать смесь типов:

Node.js

getAuth()
  .getUsers([
    { uid: 'uid1' },
    { email: 'user2@example.com' },
    { phoneNumber: '+15555550003' },
    { providerId: 'google.com', providerUid: 'google_uid4' },
  ])
  .then((getUsersResult) => {
    console.log('Successfully fetched user data:');
    getUsersResult.users.forEach((userRecord) => {
      console.log(userRecord);
    });

    console.log('Unable to find users corresponding to these identifiers:');
    getUsersResult.notFound.forEach((userIdentifier) => {
      console.log(userIdentifier);
    });
  })
  .catch((error) => {
    console.log('Error fetching user data:', error);
  });

Ява

GetUsersResult result = FirebaseAuth.getInstance().getUsersAsync(Arrays.asList(
    new UidIdentifier("uid1"),
    new EmailIdentifier("user2@example.com"),
    new PhoneIdentifier("+15555550003"),
    new ProviderIdentifier("google.com", "google_uid4"))).get();

System.out.println("Successfully fetched user data:");
for (UserRecord user : result.getUsers()) {
  System.out.println(user.getUid());
}

System.out.println("Unable to find users corresponding to these identifiers:");
for (UserIdentifier uid : result.getNotFound()) {
  System.out.println(uid);
}

питон

from firebase_admin import auth

result = auth.get_users([
    auth.UidIdentifier('uid1'),
    auth.EmailIdentifier('user2@example.com'),
    auth.PhoneIdentifier(+15555550003),
    auth.ProviderIdentifier('google.com', 'google_uid4')
])

print('Successfully fetched user data:')
for user in result.users:
    print(user.uid)

print('Unable to find users corresponding to these identifiers:')
for uid in result.not_found:
    print(uid)

Идти

getUsersResult, err := client.GetUsers(ctx, []auth.UserIdentifier{
	auth.UIDIdentifier{UID: "uid1"},
	auth.EmailIdentifier{Email: "user@example.com"},
	auth.PhoneIdentifier{PhoneNumber: "+15555551234"},
	auth.ProviderIdentifier{ProviderID: "google.com", ProviderUID: "google_uid1"},
})
if err != nil {
	log.Fatalf("error retriving multiple users: %v\n", err)
}

log.Printf("Successfully fetched user data:")
for _, u := range getUsersResult.Users {
	log.Printf("%v", u)
}

log.Printf("Unable to find users corresponding to these identifiers:")
for _, id := range getUsersResult.NotFound {
	log.Printf("%v", id)
}

С#

GetUsersResult result = await FirebaseAuth.DefaultInstance.GetUsersAsync(
    new List<UserIdentifier>
    {
        new UidIdentifier("uid1"),
        new EmailIdentifier("user2@example.com"),
        new PhoneIdentifier("+15555550003"),
        new ProviderIdentifier("google.com", "google_uid4"),
    });

Console.WriteLine("Successfully fetched user data:");
foreach (UserRecord user in result.Users)
{
    Console.WriteLine($"User: {user.Uid}");
}

Console.WriteLine("Unable to find users corresponding to these identifiers:");
foreach (UserIdentifier uid in result.NotFound)
{
    Console.WriteLine($"{uid}");
}

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

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

Административный SDK предоставляет метод, позволяющий создать нового пользователя Firebase Authentication. Этот метод принимает объект, содержащий информацию о профиле, для включения во вновь созданную учетную запись пользователя:

Node.js

getAuth()
  .createUser({
    email: 'user@example.com',
    emailVerified: false,
    phoneNumber: '+11234567890',
    password: 'secretPassword',
    displayName: 'John Doe',
    photoURL: 'http://www.example.com/12345678/photo.png',
    disabled: false,
  })
  .then((userRecord) => {
    // See the UserRecord reference doc for the contents of userRecord.
    console.log('Successfully created new user:', userRecord.uid);
  })
  .catch((error) => {
    console.log('Error creating new user:', error);
  });

Ява

CreateRequest request = new CreateRequest()
    .setEmail("user@example.com")
    .setEmailVerified(false)
    .setPassword("secretPassword")
    .setPhoneNumber("+11234567890")
    .setDisplayName("John Doe")
    .setPhotoUrl("http://www.example.com/12345678/photo.png")
    .setDisabled(false);

UserRecord userRecord = FirebaseAuth.getInstance().createUser(request);
System.out.println("Successfully created new user: " + userRecord.getUid());

питон

user = auth.create_user(
    email='user@example.com',
    email_verified=False,
    phone_number='+15555550100',
    password='secretPassword',
    display_name='John Doe',
    photo_url='http://www.example.com/12345678/photo.png',
    disabled=False)
print('Sucessfully created new user: {0}'.format(user.uid))

Идти

params := (&auth.UserToCreate{}).
	Email("user@example.com").
	EmailVerified(false).
	PhoneNumber("+15555550100").
	Password("secretPassword").
	DisplayName("John Doe").
	PhotoURL("http://www.example.com/12345678/photo.png").
	Disabled(false)
u, err := client.CreateUser(ctx, params)
if err != nil {
	log.Fatalf("error creating user: %v\n", err)
}
log.Printf("Successfully created user: %v\n", u)

С#

UserRecordArgs args = new UserRecordArgs()
{
    Email = "user@example.com",
    EmailVerified = false,
    PhoneNumber = "+11234567890",
    Password = "secretPassword",
    DisplayName = "John Doe",
    PhotoUrl = "http://www.example.com/12345678/photo.png",
    Disabled = false,
};
UserRecord userRecord = await FirebaseAuth.DefaultInstance.CreateUserAsync(args);
// See the UserRecord reference doc for the contents of userRecord.
Console.WriteLine($"Successfully created new user: {userRecord.Uid}");

По умолчанию аутентификация Firebase генерирует случайный uid пользователя для нового пользователя. Если вместо этого вы хотите указать свой собственный uid для нового пользователя, вы можете включить его в качестве аргумента, передаваемого методу создания пользователя:

Node.js

getAuth()
  .createUser({
    uid: 'some-uid',
    email: 'user@example.com',
    phoneNumber: '+11234567890',
  })
  .then((userRecord) => {
    // See the UserRecord reference doc for the contents of userRecord.
    console.log('Successfully created new user:', userRecord.uid);
  })
  .catch((error) => {
    console.log('Error creating new user:', error);
  });

Ява

CreateRequest request = new CreateRequest()
    .setUid("some-uid")
    .setEmail("user@example.com")
    .setPhoneNumber("+11234567890");

UserRecord userRecord = FirebaseAuth.getInstance().createUser(request);
System.out.println("Successfully created new user: " + userRecord.getUid());

питон

user = auth.create_user(
    uid='some-uid', email='user@example.com', phone_number='+15555550100')
print('Sucessfully created new user: {0}'.format(user.uid))

Идти

params := (&auth.UserToCreate{}).
	UID(uid).
	Email("user@example.com").
	PhoneNumber("+15555550100")
u, err := client.CreateUser(ctx, params)
if err != nil {
	log.Fatalf("error creating user: %v\n", err)
}
log.Printf("Successfully created user: %v\n", u)

С#

UserRecordArgs args = new UserRecordArgs()
{
    Uid = "some-uid",
    Email = "user@example.com",
    PhoneNumber = "+11234567890",
};
UserRecord userRecord = await FirebaseAuth.DefaultInstance.CreateUserAsync(args);
// See the UserRecord reference doc for the contents of userRecord.
Console.WriteLine($"Successfully created new user: {userRecord.Uid}");

Может быть предоставлена ​​любая комбинация следующих свойств:

Табл. 1. Свойства, поддерживаемые операцией создания пользователя

Имущество Тип Описание
uid нить uid для назначения вновь созданному пользователю. Должна быть строкой длиной от 1 до 128 символов включительно. Если он не указан, будет автоматически сгенерирован случайный uid .
email нить Основной адрес электронной почты пользователя. Адрес эл. почты должен быть действительным.
emailVerified логический Проверяется ли основной адрес электронной почты пользователя. Если не указано, по умолчанию используется значение false .
phoneNumber нить Основной номер телефона пользователя. Должен быть действительный номер телефона, соответствующий спецификации E.164.
password нить Необработанный, нехешированный пароль пользователя. Должно быть не менее шести символов.
displayName нить Отображаемое имя пользователя.
photoURL нить URL фотографии пользователя.
disabled логический Независимо от того, отключен ли пользователь. true для инвалидов; false для включенного. Если не указано, по умолчанию используется значение false .

Метод создания пользователя возвращает объект UserRecord для вновь созданного пользователя.

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

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

Firebase Admin SDK облегчает изменение данных существующего пользователя. Вам нужно указать uid вместе со свойствами для обновления для этого пользователя:

Node.js

getAuth()
  .updateUser(uid, {
    email: 'modifiedUser@example.com',
    phoneNumber: '+11234567890',
    emailVerified: true,
    password: 'newPassword',
    displayName: 'Jane Doe',
    photoURL: 'http://www.example.com/12345678/photo.png',
    disabled: true,
  })
  .then((userRecord) => {
    // See the UserRecord reference doc for the contents of userRecord.
    console.log('Successfully updated user', userRecord.toJSON());
  })
  .catch((error) => {
    console.log('Error updating user:', error);
  });

Ява

UpdateRequest request = new UpdateRequest(uid)
    .setEmail("user@example.com")
    .setPhoneNumber("+11234567890")
    .setEmailVerified(true)
    .setPassword("newPassword")
    .setDisplayName("Jane Doe")
    .setPhotoUrl("http://www.example.com/12345678/photo.png")
    .setDisabled(true);

UserRecord userRecord = FirebaseAuth.getInstance().updateUser(request);
System.out.println("Successfully updated user: " + userRecord.getUid());

питон

user = auth.update_user(
    uid,
    email='user@example.com',
    phone_number='+15555550100',
    email_verified=True,
    password='newPassword',
    display_name='John Doe',
    photo_url='http://www.example.com/12345678/photo.png',
    disabled=True)
print('Sucessfully updated user: {0}'.format(user.uid))

Идти

params := (&auth.UserToUpdate{}).
	Email("user@example.com").
	EmailVerified(true).
	PhoneNumber("+15555550100").
	Password("newPassword").
	DisplayName("John Doe").
	PhotoURL("http://www.example.com/12345678/photo.png").
	Disabled(true)
u, err := client.UpdateUser(ctx, uid, params)
if err != nil {
	log.Fatalf("error updating user: %v\n", err)
}
log.Printf("Successfully updated user: %v\n", u)

С#

UserRecordArgs args = new UserRecordArgs()
{
    Uid = uid,
    Email = "modifiedUser@example.com",
    PhoneNumber = "+11234567890",
    EmailVerified = true,
    Password = "newPassword",
    DisplayName = "Jane Doe",
    PhotoUrl = "http://www.example.com/12345678/photo.png",
    Disabled = true,
};
UserRecord userRecord = await FirebaseAuth.DefaultInstance.UpdateUserAsync(args);
// See the UserRecord reference doc for the contents of userRecord.
Console.WriteLine($"Successfully updated user: {userRecord.Uid}");

Может быть предоставлена ​​любая комбинация следующих свойств:

Табл. 2. Свойства, поддерживаемые операцией обновления пользователя

Имущество Тип Описание
email нить Новый основной адрес электронной почты пользователя. Адрес эл. почты должен быть действительным.
emailVerified логический Проверяется ли основной адрес электронной почты пользователя. Если не указано, по умолчанию используется значение false .
phoneNumber нить Новый основной номер телефона пользователя. Должен быть действительный номер телефона, соответствующий спецификации E.164. Установите значение null , чтобы очистить существующий номер телефона пользователя.
password нить Новый необработанный, нехешированный пароль пользователя. Должно быть не менее шести символов.
displayName строка | null Новое отображаемое имя пользователя. Установите значение null , чтобы очистить существующее отображаемое имя пользователя.
photoURL строка | null URL новой фотографии пользователя. Установите значение null , чтобы очистить существующий URL-адрес фотографии пользователя. Если null , должен быть допустимым URL-адресом.
disabled логический Независимо от того, отключен ли пользователь. true для инвалидов; false для включенного.

Пользовательский метод обновления возвращает обновленный объект UserRecord после успешного завершения обновления.

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

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

Firebase Admin SDK позволяет удалять существующих пользователей по их uid :

Node.js

getAuth()
  .deleteUser(uid)
  .then(() => {
    console.log('Successfully deleted user');
  })
  .catch((error) => {
    console.log('Error deleting user:', error);
  });

Ява

FirebaseAuth.getInstance().deleteUser(uid);
System.out.println("Successfully deleted user.");

питон

auth.delete_user(uid)
print('Successfully deleted user')

Идти

err := client.DeleteUser(ctx, uid)
if err != nil {
	log.Fatalf("error deleting user: %v\n", err)
}
log.Printf("Successfully deleted user: %s\n", uid)

С#

await FirebaseAuth.DefaultInstance.DeleteUserAsync(uid);
Console.WriteLine("Successfully deleted user.");

Метод удаления пользователя возвращает пустой результат после успешного завершения удаления.

Если предоставленный uid не соответствует существующему пользователю или пользователь не может быть удален по какой-либо другой причине, метод удаления пользователя выдает ошибку. Полный список кодов ошибок, включая описания и шаги по устранению, см. в разделе Ошибки API аутентификации администратора .

Удалить несколько пользователей

Firebase Admin SDK также может удалять нескольких пользователей одновременно. Однако обратите внимание, что использование таких методов, как deleteUsers(uids) для одновременного удаления нескольких пользователей, не приведет к срабатыванию обработчиков событий onDelete() для облачных функций для Firebase. Это связано с тем, что пакетное удаление не вызывает событие удаления пользователя для каждого пользователя. Удаляйте пользователей по одному, если вы хотите, чтобы события удаления пользователей запускались для каждого удаленного пользователя.

Node.js

getAuth()
  .deleteUsers([uid1, uid2, uid3])
  .then((deleteUsersResult) => {
    console.log(`Successfully deleted ${deleteUsersResult.successCount} users`);
    console.log(`Failed to delete ${deleteUsersResult.failureCount} users`);
    deleteUsersResult.errors.forEach((err) => {
      console.log(err.error.toJSON());
    });
  })
  .catch((error) => {
    console.log('Error deleting users:', error);
  });

Ява

DeleteUsersResult result = FirebaseAuth.getInstance().deleteUsersAsync(
    Arrays.asList("uid1", "uid2", "uid3")).get();

System.out.println("Successfully deleted " + result.getSuccessCount() + " users");
System.out.println("Failed to delete " + result.getFailureCount() + " users");
for (ErrorInfo error : result.getErrors()) {
  System.out.println("error #" + error.getIndex() + ", reason: " + error.getReason());
}

питон

from firebase_admin import auth

result = auth.delete_users(["uid1", "uid2", "uid3"])

print('Successfully deleted {0} users'.format(result.success_count))
print('Failed to delete {0} users'.format(result.failure_count))
for err in result.errors:
    print('error #{0}, reason: {1}'.format(result.index, result.reason))

Идти

deleteUsersResult, err := client.DeleteUsers(ctx, []string{"uid1", "uid2", "uid3"})
if err != nil {
	log.Fatalf("error deleting users: %v\n", err)
}

log.Printf("Successfully deleted %d users", deleteUsersResult.SuccessCount)
log.Printf("Failed to delete %d users", deleteUsersResult.FailureCount)
for _, err := range deleteUsersResult.Errors {
	log.Printf("%v", err)
}

С#

DeleteUsersResult result = await FirebaseAuth.DefaultInstance.DeleteUsersAsync(new List<string>
    {
        "uid1",
        "uid2",
        "uid3",
    });

Console.WriteLine($"Successfully deleted {result.SuccessCount} users.");
Console.WriteLine($"Failed to delete {result.FailureCount} users.");

foreach (ErrorInfo err in result.Errors)
{
    Console.WriteLine($"Error #{err.Index}, reason: {err.Reason}");
}

Метод удаления пользователей возвращает список сбоев для пользователей, которых не удалось удалить. Полный список кодов ошибок, включая описания и шаги по устранению, см. в разделе Ошибки API аутентификации администратора .

Список всех пользователей

Firebase Admin SDK позволяет получить весь список пользователей в пакетном режиме:

Node.js

const listAllUsers = (nextPageToken) => {
  // List batch of users, 1000 at a time.
  getAuth()
    .listUsers(1000, nextPageToken)
    .then((listUsersResult) => {
      listUsersResult.users.forEach((userRecord) => {
        console.log('user', userRecord.toJSON());
      });
      if (listUsersResult.pageToken) {
        // List next batch of users.
        listAllUsers(listUsersResult.pageToken);
      }
    })
    .catch((error) => {
      console.log('Error listing users:', error);
    });
};
// Start listing users from the beginning, 1000 at a time.
listAllUsers();

Ява

// Start listing users from the beginning, 1000 at a time.
ListUsersPage page = FirebaseAuth.getInstance().listUsers(null);
while (page != null) {
  for (ExportedUserRecord user : page.getValues()) {
    System.out.println("User: " + user.getUid());
  }
  page = page.getNextPage();
}

// Iterate through all users. This will still retrieve users in batches,
// buffering no more than 1000 users in memory at a time.
page = FirebaseAuth.getInstance().listUsers(null);
for (ExportedUserRecord user : page.iterateAll()) {
  System.out.println("User: " + user.getUid());
}

питон

# Start listing users from the beginning, 1000 at a time.
page = auth.list_users()
while page:
    for user in page.users:
        print('User: ' + user.uid)
    # Get next batch of users.
    page = page.get_next_page()

# Iterate through all users. This will still retrieve users in batches,
# buffering no more than 1000 users in memory at a time.
for user in auth.list_users().iterate_all():
    print('User: ' + user.uid)

Идти

// Note, behind the scenes, the Users() iterator will retrive 1000 Users at a time through the API
iter := client.Users(ctx, "")
for {
	user, err := iter.Next()
	if err == iterator.Done {
		break
	}
	if err != nil {
		log.Fatalf("error listing users: %s\n", err)
	}
	log.Printf("read user user: %v\n", user)
}

// Iterating by pages 100 users at a time.
// Note that using both the Next() function on an iterator and the NextPage()
// on a Pager wrapping that same iterator will result in an error.
pager := iterator.NewPager(client.Users(ctx, ""), 100, "")
for {
	var users []*auth.ExportedUserRecord
	nextPageToken, err := pager.NextPage(&users)
	if err != nil {
		log.Fatalf("paging error %v\n", err)
	}
	for _, u := range users {
		log.Printf("read user user: %v\n", u)
	}
	if nextPageToken == "" {
		break
	}
}

С#

// Start listing users from the beginning, 1000 at a time.
var pagedEnumerable = FirebaseAuth.DefaultInstance.ListUsersAsync(null);
var responses = pagedEnumerable.AsRawResponses().GetAsyncEnumerator();
while (await responses.MoveNextAsync())
{
    ExportedUserRecords response = responses.Current;
    foreach (ExportedUserRecord user in response.Users)
    {
        Console.WriteLine($"User: {user.Uid}");
    }
}

// Iterate through all users. This will still retrieve users in batches,
// buffering no more than 1000 users in memory at a time.
var enumerator = FirebaseAuth.DefaultInstance.ListUsersAsync(null).GetAsyncEnumerator();
while (await enumerator.MoveNextAsync())
{
    ExportedUserRecord user = enumerator.Current;
    Console.WriteLine($"User: {user.Uid}");
}

Каждый пакет результатов содержит список пользователей и токен следующей страницы, используемый для перечисления следующего пакета пользователей. Когда все пользователи уже перечислены, pageToken не возвращается.

Если поле maxResults не указано, по умолчанию используется 1000 пользователей на пакет. Это также максимальное количество пользователей, которые могут быть указаны одновременно. Любое значение больше максимального вызовет ошибку аргумента. Если pageToken не указан, операция будет перечислять пользователей с самого начала, упорядоченных по uid .

Полный список кодов ошибок, включая описания и шаги по устранению, см. в разделе Ошибки API аутентификации администратора .

Хэши паролей перечисленных пользователей

Этот API также возвращает passwordSalt и passwordHash , хешированные серверной частью аутентификации Firebase для пользователей паролей, если учетная запись пользователя/службы, используемая для создания токена доступа OAuth запроса, имеет разрешение firebaseauth.configs.getHashConfig . В противном случае passwordHash и passwordSalt не будут установлены.

Из-за конфиденциального характера хэшей паролей учетная запись службы Firebase Admin SDK по умолчанию не имеет разрешения firebaseauth.configs.getHashConfig . Вы не можете добавить разрешение непосредственно в учетную запись пользователя/службы, но вы можете сделать это косвенно, создав пользовательскую роль IAM .

Чтобы создать пользовательскую роль IAM:

  1. Перейдите на страницу « Роли » в IAM и панели администратора в Google Cloud Console.
  2. Выберите свой проект в раскрывающемся списке в верхней части страницы.
  3. Нажмите СОЗДАТЬ РОЛЬ
  4. Нажмите ДОБАВИТЬ РАЗРЕШЕНИЯ
  5. Найдите разрешение firebaseauth.configs.getHashConfig и установите этот флажок.
  6. Нажмите ДОБАВИТЬ
  7. Щелкните СОЗДАТЬ , чтобы завершить создание новой роли.

Добавьте созданную пользовательскую роль в учетную запись пользователя/службы на странице IAM:

  1. В панели IAM и администратора выберите IAM
  2. Выберите службу или учетную запись пользователя из списка участников для редактирования.
  3. Нажмите ДОБАВИТЬ ДРУГУЮ РОЛЬ .
  4. Найдите новую пользовательскую роль, созданную ранее.
  5. Нажмите СОХРАНИТЬ .