O SDK Admin do Firebase fornece uma API para gerenciar seus usuários do Firebase Authentication com privilégios elevados. A API de gerenciamento de usuários do administrador permite realizar, de modo programático, as seguintes tarefas em um ambiente de servidor seguro:
- Criar novos usuários sem limitação de taxa.
- Pesquisar usuários por diferentes critérios, como UID, e-mail ou número de telefone.
- Listar todos os usuários de um projeto específico em lotes.
- Acessar metadados de usuários, incluindo data de criação da conta e última data de login.
- Excluir usuários sem exigir a senha existente.
- Atualizar propriedades de usuários, incluindo senha, sem precisar fazer login como o usuário.
- Verificar e-mails sem ter que passar pelos fluxos de ação fora de banda.
- Alterar o e-mail de um usuário sem enviar links de e-mail para revogar as alterações.
- Criar um novo usuário com um número de telefone sem ter que passar pelo fluxo de verificação SMS.
- Alterar o número de telefone de um usuário sem ter que passar pelo fluxo de verificação SMS.
- Fazer o provisionamento off-line de usuários em estado desativado e, depois, controlar a ativação.
- Criar consoles personalizados de usuário ajustados para o sistema de gerenciamento de usuários de um app específico.
Antes de começar
Para usar a API de gerenciamento de usuários fornecida pelo SDK Admin do Firebase, você precisa ter uma conta de serviço. Siga as instruções de configuração para saber mais sobre como inicializar o SDK Admin.
Recuperar dados do usuário
A principal forma de identificar um usuário é pelo uid
, que é um identificador exclusivo. O SDK Admin fornece um método que permite buscar as informações de perfil dos usuários pelo 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);
});
Java
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))
Go
// 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}");
Esse método retorna um objeto UserRecord
para o usuário correspondente ao uid
fornecido.
Se o uid
indicado não pertencer a um usuário existente ou não for possível encontrar o usuário por qualquer outro motivo, o método acima vai gerar um erro.
Para ver uma lista completa de códigos de erro, incluindo descrições e etapas de resolução, consulte Erros da API Admin Auth.
Em alguns casos, você terá o e-mail do usuário em vez do uid
. O SDK Admin do Firebase permite pesquisar as informações do usuário com um e-mail:
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);
});
Java
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))
Go
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}");
Esse método retorna um objeto UserRecord
para o
usuário correspondente ao e-mail fornecido.
Se o e-mail indicado não pertencer a um usuário existente ou não for possível encontrar o usuário por qualquer outro motivo, o método acima vai gerar um erro. Para ver uma lista completa de códigos de erro, incluindo descrições e etapas de resolução, consulte Erros da API Admin Authentication.
Em outros casos, você terá o número de telefone do usuário, em vez do uid
. O SDK Admin do Firebase permite pesquisar as informações do usuário com um número de telefone:
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);
});
Java
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))
Go
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}");
Esse método retorna um objeto UserRecord
para o
usuário correspondente ao número de telefone fornecido.
Se o número de telefone não pertencer a um usuário existente ou não for possível encontrar o usuário por qualquer outro motivo, o SDK Admin vai gerar um erro. Para ver uma lista completa de códigos de erro, incluindo descrições e etapas de resolução, consulte Erros da API Admin Authentication.
Recuperar dados do usuário em massa
Com o SDK Admin do Firebase, também é possível recuperar uma lista de usuários com base nos identificadores fornecidos por você. Com ele, é possível identificar usuários pelo ID de usuário, e-mail ou número de telefone. Também é possível fornecer até 100 identificadores em uma única chamada. Os identificadores podem apresentar uma mistura de tipos:
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);
});
Java
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)
Go
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}");
}
Esse método retorna uma lista do mesmo tamanho que a lista de entrada, cada uma
contendo o UserRecord
correspondente ou um erro indicando o motivo para
esse identificador não ter sido pesquisado. Para ver uma lista completa de códigos de erro,
incluindo descrições e etapas de resolução, consulte Erros da API Admin
Authentication.
Criar um usuário
O SDK Admin fornece um método que permite criar um novo usuário do Firebase Authentication. Esse método aceita um objeto que contém as informações de perfil para incluir na conta de usuário recém-criada:
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);
});
Java
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))
Go
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}");
Por padrão, o Firebase Authentication vai gerar um uid
aleatório para o novo usuário. Em vez disso,
se você quiser especificar seu próprio uid
para o novo usuário, inclua-o
como argumento transmitido para o método de criação de usuário:
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);
});
Java
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))
Go
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}");
Qualquer combinação das seguintes propriedades pode ser feita:
Tabela 1. Propriedades aceitas pela operação de criação de usuário
Propriedade | Tipo | Descrição |
---|---|---|
uid |
string |
O uid que será atribuído ao usuário recém-criado. Precisa ser uma
string entre 1 a 128 caracteres. Caso não seja indicado, um
uid aleatório vai ser gerado automaticamente. uid s
mais curtos oferecem um desempenho melhor.
|
email |
string | O e-mail principal do usuário. Deve ser um endereço de e-mail válido. |
emailVerified |
booleano |
Indica se o e-mail principal do usuário foi verificado ou não. Caso nenhum valor seja fornecido, o padrão será false .
|
phoneNumber |
string | O número de telefone principal do usuário. Deve ser um número de telefone em compliance com a especificação E.164. |
password |
string | A senha bruta e sem hash do usuário. Deve ter pelo menos seis caracteres. |
displayName |
string | O nome de exibição do usuário. |
photoURL |
string | O URL da foto do usuário. |
disabled |
booleano |
Indica se o usuário está desativado ou não. true para desativado e false para ativado. Caso nenhum valor seja fornecido, o padrão será false .
|
O método de criação de usuário retorna um objeto UserRecord
para o
usuário recém-criado.
Se o uid
, e-mail ou número de telefone fornecidos estiverem sendo usados por um usuário atual,
ou se não for possível criar o usuário por qualquer outro motivo, o método acima falhará
devido a um erro. Para ver uma lista completa de códigos de erro, incluindo descrições e etapas de resolução, consulte Erros da API Admin Authentication.
Atualizar um usuário
O SDK Admin do Firebase facilita a modificação dos dados de um usuário atual. É necessário especificar um uid
com as propriedades que serão atualizadas para o usuário:
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);
});
Java
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))
Go
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}");
Qualquer combinação das seguintes propriedades pode ser feita:
Tabela 2. Propriedades com suporte na operação de atualização de usuário
Propriedade | Tipo | Descrição |
---|---|---|
email |
string | O novo e-mail principal do usuário. Deve ser um endereço de e-mail válido. |
emailVerified |
booleano |
Indica se o e-mail principal do usuário foi verificado ou não. Caso nenhum valor seja fornecido, o padrão será false .
|
phoneNumber |
string |
O novo número de telefone principal do usuário. Deve ser um número de telefone em compliance com a especificação E.164. Defina como null para limpar o número de telefone atual do usuário.
|
password |
string | A senha bruta e sem hash do usuário. Deve ter pelo menos seis caracteres. |
displayName |
string | null |
O novo nome de exibição do usuário. Defina como null para limpar o nome de exibição atual do usuário.
|
photoURL |
string | null |
O novo URL da foto do usuário. Defina como null para limpar o URL da foto atual do usuário. Se não for configurado como null , precisará ser um URL válido. |
disabled |
booleano |
Indica se o usuário está desativado ou não. true para desativado e false para ativado.
|
O método de atualização de usuário vai retornar um objeto UserRecord
se a
atualização for concluída com êxito.
Se o uid
indicado não corresponder a um usuário existente, o e-mail
ou número de telefone enviado já estiver sendo usado ou se não for possível
atualizar o usuário por qualquer outro motivo, o método acima vai gerar um erro. Para ver uma lista completa de códigos de erro, incluindo descrições e etapas de resolução, consulte Erros da API Admin Authentication.
Excluir um usuário
O SDK Admin do Firebase permite excluir usuários atuais pelo uid
:
Node.js
getAuth()
.deleteUser(uid)
.then(() => {
console.log('Successfully deleted user');
})
.catch((error) => {
console.log('Error deleting user:', error);
});
Java
FirebaseAuth.getInstance().deleteUser(uid);
System.out.println("Successfully deleted user.");
Python
auth.delete_user(uid)
print('Successfully deleted user')
Go
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.");
O método de exclusão de usuário retorna um resultado em branco quando a exclusão é concluída com sucesso.
Se o uid
indicado não corresponder a um usuário existente ou não for possível excluir o usuário por qualquer outro motivo, o método de exclusão de usuário vai gerar um erro.
Para ver uma lista completa de códigos de erro, incluindo descrições e etapas de resolução, consulte Erros da API Admin Authentication.
Excluir vários usuários
O SDK Admin do Firebase também pode excluir vários usuários de uma só vez. No entanto, usar métodos como deleteUsers(uids)
para excluir vários usuários de uma só vez não acionará manipuladores de eventos onDelete()
para o Cloud Functions para Firebase.
Isso ocorre porque a exclusão em lote não aciona um evento de exclusão de usuário em cada usuário. Exclua um usuário por vez se quiser que os eventos de exclusão de usuário sejam disparados para cada usuário excluído.
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);
});
Java
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))
Go
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}");
}
O método de exclusão de usuários retorna uma lista de falhas para os usuários que não puderam ser excluídos. Para ver uma lista completa de códigos de erro, incluindo descrições e etapas de resolução, consulte Erros da API Admin Authentication.
Listar todos os usuários
O SDK Admin do Firebase permite recuperar toda a lista de usuários em lotes:
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();
Java
// 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)
Go
// 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}");
}
Cada lote de resultados contém uma lista de usuários e o token de próxima página usado para listar o próximo lote de usuários. Quando todos os usuários tiverem sido listados, nenhum pageToken
será retornado.
Se nenhum campo maxResults
for especificado, o padrão de 1.000 usuários por lote será usado.
Esse é também o número máximo de usuários autorizados a serem listados por vez. Qualquer valor maior que o máximo lançará um erro de argumento.
Se nenhum pageToken
for especificado, a operação listará os usuários desde o
início, ordenados por uid
.
Para ver uma lista completa de códigos de erro, incluindo descrições e etapas de resolução, consulte Erros da API Admin Authentication.
Hashes de senha dos usuários listados
Se a conta de usuário/serviço usada para gerar a solicitação do token de acesso OAuth tiver a permissão firebaseauth.configs.getHashConfig
, a API retornará passwordSalt
e passwordHash
com hash aplicado pelo back-end do Firebase Auth para usuários de senhas. Caso contrário, passwordHash
e passwordSalt
não serão definidos.
Devido à natureza confidencial dos hashes de senha, a conta
de serviço do SDK Admin do Firebase não tem a permissão firebaseauth.configs.getHashConfig
por
padrão. Não é possível adicionar uma permissão diretamente a uma conta de usuário/serviço, mas é possível fazer isso indiretamente ao criar um papel personalizado do IAM.
Para criar o papel, siga estas etapas:
- Acesse a página Papéis no painel IAM e administrador do Console do Google Cloud.
- Na parte de cima da página, selecione o projeto no menu suspenso.
- Clique em CRIAR PAPEL
- Clique em ADICIONAR PERMISSÕES
- Procure a permissão
firebaseauth.configs.getHashConfig
e marque a caixa de seleção. - Clique em ADICIONAR.
- Selecione CRIAR para concluir o processo.
Para adicionar o papel personalizado à conta de usuário/serviço na página do IAM, siga estas etapas:
- No painel IAM e administrador, selecione IAM
- Procure a conta de usuário/serviço na lista de membros editáveis e a selecione.
- Clique em ADICIONAR OUTRO PAPEL.
- Pesquise o novo papel personalizado que você criou.
- Clique em SALVAR.