Gerenciar usuários no Firebase

Criar um usuário

Você cria um novo usuário no seu projeto do Firebase de quatro maneiras:

  • Chame o método createUserWithEmailAndPassword().
  • Faça o login de um usuário pela primeira vez usando um provedor de identidade federado , como o Login do Google, o Login do Facebook ou a Apple.

Também é possível criar novos usuários autenticados por senha na seção "Autenticação" do Console do Firebase, na página "Usuários".

Receber o perfil de um usuário

Para receber informações de perfil de um usuário, use as propriedades de User. Há três maneiras de ter um objeto User que represente o usuário atual:

  • Os streams authStateChanges, idTokenChanges e userChanges: seus listeners vão receber o User ou null atual se nenhum usuário estiver autenticado:

    FirebaseAuth.instance
      .authStateChanges()
      .listen((User? user) {
        if (user != null) {
          print(user.uid);
        }
      });
    

    Quando o app é iniciado, um evento é acionado após a restauração das credenciais do usuário (se houver) do armazenamento local. Isso significa que os listeners sempre são chamados quando o estado do usuário é inicializado. Depois, sempre que o estado de autenticação mudar, um novo evento será gerado com o estado do usuário atualizado.

    Ao ouvir o estado de autenticação, você pode criar uma interface do usuário que reage a essas alterações no estado de autenticação.

  • O objeto UserCredential retornado pelos métodos de autenticação (signIn-): o objeto UserCredential tem uma propriedade user com o User atual:

    final userCredential =
        await FirebaseAuth.instance.signInWithCredential(credential);
    final user = userCredential.user;
    print(user?.uid);
    
  • A propriedade currentUser da instância FirebaseAuth: se você tiver certeza de que o usuário está conectado, acesse User na propriedade currentUser:

    if (FirebaseAuth.instance.currentUser != null) {
      print(FirebaseAuth.instance.currentUser?.uid);
    }
    

    O currentUser pode ser null por dois motivos:

    • O usuário não está conectado.
    • A inicialização do objeto de autenticação não foi concluída. Se você usa um listener para monitorar o status de login do usuário, não é necessário processar esse caso.

Receber informações específicas de provedor do perfil de um usuário

Para receber as informações de perfil obtidas dos provedores de login vinculados a um usuário, use a propriedade providerData. Exemplo:

if (user != null) {
    for (final providerProfile in user.providerData) {
        // ID of the provider (google.com, apple.com, etc.)
        final provider = providerProfile.providerId;

        // UID specific to the provider
        final uid = providerProfile.uid;

        // Name, email address, and profile photo URL
        final name = providerProfile.displayName;
        final emailAddress = providerProfile.email;
        final profilePhoto = providerProfile.photoURL;
    }
}

Atualizar o perfil de um usuário

É possível atualizar as informações básicas do perfil de um usuário, como o nome de exibição e o URL da foto do perfil dele, com o método update. Exemplo:

await user?.updateDisplayName("Jane Q. User");
await user?.updatePhotoURL("https://example.com/jane-q-user/profile.jpg");

Definir o endereço de e-mail de um usuário

É possível definir o endereço de e-mail de um usuário com o método updateEmail(). Exemplo:

await user?.updateEmail("janeq@example.com");

Enviar um e-mail de verificação a um usuário

Envie um e-mail de verificação de endereço a um usuário com o método sendEmailVerification(). Exemplo:

await user?.sendEmailVerification();

É possível personalizar o modelo de e-mail usado na seção "Autenticação" do Console do Firebase na página "Modelos de e-mail". Consulte Modelos de e-mail na Central de Ajuda do Firebase.

Também é possível transmitir um estado usando um URL de confirmação a fim de redirecionar para o app ao enviar um e-mail de verificação.

Além disso, você pode localizar o e-mail de verificação atualizando o código do idioma na instância Auth antes de enviar o e-mail. Exemplo:

await FirebaseAuth.instance.setLanguageCode("fr");
await user?.sendEmailVerification();

Definir a senha de um usuário

Defina a senha de um usuário com o método updatePassword(). Exemplo:

await user?.updatePassword(newPassword);

Enviar um e-mail de redefinição de senha

Envie um e-mail de redefinição de senha a um usuário com o método sendPasswordResetEmail(). Exemplo:

await FirebaseAuth.instance
    .sendPasswordResetEmail(email: "user@example.com");

É possível personalizar o modelo de e-mail usado na seção "Autenticação" do Console do Firebase na página "Modelos de e-mail". Consulte Modelos de e-mail na Central de Ajuda do Firebase.

Também é possível transmitir um estado usando um URL de confirmação a fim de redirecionar para o app ao enviar um e-mail de verificação.

Além disso, você pode localizar o e-mail de redefinição da senha atualizando o código do idioma na instância Auth antes de enviar o e-mail. Exemplo:

await FirebaseAuth.instance.setLanguageCode("fr");

Você também pode enviar e-mails de redefinição de senha pelo Firebase console.

Excluir um usuário

Exclua uma conta de usuário com o método delete(). Exemplo:

await user?.delete();

Também é possível excluir usuários na seção Authentication do Console do Firebase na página "Usuários".

Reautenticar um usuário

Algumas ações que apresentam riscos à segurança, como excluir uma conta, configurar um endereço de e-mail principal e alterar uma senha, exigem que o usuário tenha feito login recentemente. Se você executar uma dessas ações e o usuário tiver feito login há muito tempo, ela falhará e gerará uma FirebaseAuthException com o código requires-recent-login. Quando isso acontecer, autentique o usuário novamente gerando novas credenciais de login e transmitindo-as para reauthenticate. Exemplo:

// Prompt the user to re-provide their sign-in credentials.
// Then, use the credentials to reauthenticate:
await user?.reauthenticateWithCredential(credential);

Importar contas de usuário

Use o comando auth:import da CLI do Firebase para importar contas de usuário de um arquivo para o projeto do Firebase. Exemplo:

firebase auth:import users.json --hash-algo=scrypt --rounds=8 --mem-cost=14