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(f'Successfully fetched user data: {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(f'Successfully fetched user data: {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 Authentication администратора» .
В других случаях вместо 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(f'Successfully fetched user data: {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 Authentication администратора» .
Массовое извлечение пользовательских данных
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 Authentication администратора» .
Создать пользователя
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());
Питон
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(f'Sucessfully created new user: {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 Authentication генерирует случайный 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(f'Sucessfully created new user: {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 . Более короткие идентификаторы пользователя uid ) обеспечивают более высокую производительность. |
email | нить | Основной адрес электронной почты пользователя. Должен быть действительным адресом электронной почты. |
emailVerified | булев | Подтверждён ли основной адрес электронной почты пользователя. Если не указан, по умолчанию используется значение false . |
phoneNumber | нить | Основной номер телефона пользователя. Должен быть действительным номером, соответствующим спецификации E.164. |
password | нить | Исходный, нехешированный пароль пользователя. Должен быть длиной не менее шести символов. |
displayName | нить | Отображаемое имя пользователя. |
photoURL | нить | URL фотографии пользователя. |
disabled | булев | Отключён ли пользователь. true для отключенного; false для включённого. Если не указано, по умолчанию используется false . |
Метод создания пользователя возвращает объект UserRecord
для вновь созданного пользователя.
Если предоставленный uid
, адрес электронной почты или номер телефона уже используется существующим пользователем или создать пользователя невозможно по какой-либо другой причине, описанный выше метод завершится ошибкой. Полный список кодов ошибок, включая описания и способы устранения, см. в разделе «Ошибки API Authentication администратора» .
Обновить пользователя
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(f'Sucessfully updated user: {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 Authentication администратора» .
Удалить пользователя
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 Authentication администратора» .
Удалить нескольких пользователей
Firebase Admin SDK также позволяет удалять нескольких пользователей одновременно. Однако обратите внимание, что использование методов, таких как deleteUsers(uids)
, для одновременного удаления нескольких пользователей не приведёт к запуску обработчиков событий onDelete()
в Cloud Functions for 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(f'Successfully deleted {result.success_count} users')
print(f'Failed to delete {result.failure_count} users')
for err in result.errors:
print(f'error #{result.index}, reason: {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}");
}
Метод delete users возвращает список ошибок для пользователей, которых не удалось удалить. Полный список кодов ошибок, включая описания и способы устранения, см. в разделе «Ошибки API Authentication администратора» .
Список всех пользователей
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 Authentication администратора .
Хэши паролей перечисленных пользователей
Этот API также возвращает passwordSalt
и passwordHash
хешированные бэкендом Firebase Auth для пользователей с паролями, если учётная запись пользователя/сервиса, используемая для генерации токена доступа OAuth запроса, имеет разрешение firebaseauth.configs.getHashConfig
. В противном случае passwordHash
и passwordSalt
не будут установлены.
В связи с конфиденциальностью хэшей паролей учётная запись службы Firebase Admin SDK по умолчанию не имеет разрешения firebaseauth.configs.getHashConfig
. Вы не можете добавить разрешение напрямую учётной записи пользователя/службы, но можете сделать это косвенно, создав пользовательскую роль IAM .
Чтобы создать пользовательскую роль IAM:
- Перейдите на страницу «Роли» на панели IAM и администрирования в консоли Google Cloud .
- Выберите свой проект из раскрывающегося списка в верхней части страницы.
- Нажмите «СОЗДАТЬ РОЛЬ».
- Нажмите ДОБАВИТЬ РАЗРЕШЕНИЯ.
- Найдите разрешение
firebaseauth.configs.getHashConfig
и установите этот флажок. - Нажмите ДОБАВИТЬ
- Нажмите СОЗДАТЬ , чтобы завершить создание новой роли.
Добавьте созданную пользовательскую роль в учетную запись пользователя/службы на странице IAM:
- На панели IAM и администрирования выберите IAM .
- Выберите службу или учетную запись пользователя из списка участников для редактирования.
- Нажмите ДОБАВИТЬ ДРУГУЮ РОЛЬ .
- Найдите новую пользовательскую роль, созданную ранее.
- Нажмите СОХРАНИТЬ .