Catch up on everthing we announced at this year's Firebase Summit. Learn more

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

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

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

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

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

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

Основным способом идентификации пользователя является их uid , уникальный идентификатор для этого пользователя. Администратор 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());

Python

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)

C #

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 администратора Auth .

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

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());

Python

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)

C #

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 . SDK Firebase Admin поддерживает поиск информации о пользователе по номеру телефона:

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());

Python

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)

C #

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 Администратор аутентификации .

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

SDK Firebase Admin также позволяет получать список пользователей на основе предоставленных вами идентификаторов. Вы можете идентифицировать пользователей по их идентификатору пользователя, электронной почте или номеру телефона. За один вызов может быть предоставлено до 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);
}

Python

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)
}

C #

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 Администратор аутентификации .

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

Admin 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());

Python

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)

C #

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());

Python

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)

C #

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 Администратор аутентификации .

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

SDK Firebase Admin упрощает изменение данных существующего пользователя. Вам необходимо указать 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());

Python

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)

C #

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.");

Python

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)

C #

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());
}

Python

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)
}

C #

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 Администратор аутентификации .

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

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

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());
}

Python

# 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
	}
}

C #

// 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 Auth для пользователей пароля , если учетная запись пользователя / сервиса используется для создания доступа OAuth маркера запроса имеет firebaseauth.configs.getHashConfig разрешения. В противном случае passwordHash и passwordSalt не будут установлены.

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

Чтобы создать настраиваемую роль IAM:

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

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

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