Ir para o console

Gerenciar usuários

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, um identificador exclusivo do usuário. O SDK Admin fornece um método que permite buscar as informações de perfil dos usuários pelo uid:

Node.js

admin.auth().getUser(uid)
  .then(function(userRecord) {
    // See the UserRecord reference doc for the contents of userRecord.
    console.log('Successfully fetched user data:', userRecord.toJSON());
  })
  .catch(function(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 não pertencer a um usuário existente ou não for possível consultar o usuário por qualquer outro motivo, o método acima lança um erro. Para ver uma lista completa de códigos de erro, inclusive descrições e etapas de resolução, consulte Erros da API Admin Auth.

Em alguns casos, você terá o e-mail de um 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

admin.auth().getUserByEmail(email)
  .then(function(userRecord) {
    // See the UserRecord reference doc for the contents of userRecord.
    console.log('Successfully fetched user data:', userRecord.toJSON());
  })
  .catch(function(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 fornecido não pertencer a um usuário existente ou não for possível consultar o usuário por qualquer outro motivo, o SDK Admin lança um erro. Para ver uma lista completa de códigos de erro, inclusive descrições e etapas de resolução, consulte Erros da API Admin Authentication.

Em outros casos, você terá o número de telefone de um 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

admin.auth().getUserByPhoneNumber(phoneNumber)
  .then(function(userRecord) {
    // See the UserRecord reference doc for the contents of userRecord.
    console.log('Successfully fetched user data:', userRecord.toJSON());
  })
  .catch(function(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 fornecido não pertencer a um usuário existente ou não for possível consultar o usuário por qualquer outro motivo, o SDK Admin lança um erro. Para ver uma lista completa de códigos de erro, inclusive 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 que você crie 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

admin.auth().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(function(userRecord) {
    // See the UserRecord reference doc for the contents of userRecord.
    console.log('Successfully created new user:', userRecord.uid);
  })
  .catch(function(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 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, poderá incluí-lo no argumento transmitido para o método de criação de usuário:

Node.js

admin.auth().createUser({
  uid: 'some-uid',
  email: 'user@example.com',
  phoneNumber: '+11234567890'
})
  .then(function(userRecord) {
    // See the UserRecord reference doc for the contents of userRecord.
    console.log('Successfully created new user:', userRecord.uid);
  })
  .catch(function(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. Deve ser uma string entre 1 e 128 caracteres. Caso o uid não seja fornecido, um aleatório será gerado automaticamente.
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 não 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 compatível 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 não 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 fornecido, o e-mail ou o número de telefone já for usado por um usuário existente ou se não for possível criar o usuário por qualquer outro motivo, o método acima falha devido a um erro. Para ver uma lista completa de códigos de erro, inclusive 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 existente. Você precisa especificar um uid juntamente com as propriedades a serem atualizadas para esse usuário:

Node.js

admin.auth().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(function(userRecord) {
    // See the UserRecord reference doc for the contents of userRecord.
    console.log('Successfully updated user', userRecord.toJSON());
  })
  .catch(function(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 aceitas pela 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 não 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 compatível com a especificação E.164. Defina como null para limpar o número de telefone existente 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 existente do usuário.
photoURL string | null O novo URL da foto do usuário. Defina como null para limpar o URL da foto existente do usuário. Se não for configurado como null, deve 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 retorna um objeto UserRecord quando a atualização é concluída com êxito.

Se o uid fornecido não corresponder a um usuário existente, o e-mail fornecido já for usado por um usuário existente ou se não for possível criar o usuário por qualquer outro motivo, o método acima falha devido a um erro. Para ver uma lista completa de códigos de erro, inclusive 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 existentes pelo uid:

Node.js

admin.auth().deleteUser(uid)
  .then(function() {
    console.log('Successfully deleted user');
  })
  .catch(function(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 fornecido 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 lança um erro. Para ver uma lista completa de códigos de erro, inclusive 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

function listAllUsers(nextPageToken) {
  // List batch of users, 1000 at a time.
  admin.auth().listUsers(1000, nextPageToken)
    .then(function(listUsersResult) {
      listUsersResult.users.forEach(function(userRecord) {
        console.log('user', userRecord.toJSON());
      });
      if (listUsersResult.pageToken) {
        // List next batch of users.
        listAllUsers(listUsersResult.pageToken);
      }
    })
    .catch(function(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().GetEnumerator();
while (await responses.MoveNext())
{
    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).GetEnumerator();
while (await enumerator.MoveNext())
{
    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 já tiverem sido listados, nenhum pageToken será retornado. Esta API também retorna o passwordSalt e o passwordHash com hash aplicado pelo back-end do Firebase Auth se o usuário for um usuário de senha.

Se nenhum campo maxResults for especificado, será usado o padrão de 1.000 usuários por lote. 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, inclusive descrições e etapas de resolução, consulte Erros da API Admin Authentication.