Autenticar com o Firebase usando contas baseadas em senha com o Unity

Use Firebase Authentication para permitir que os usuários se autentiquem com o Firebase usando os próprios endereços de e-mail e senhas e para gerenciar as contas baseadas em senha do seu app.

Antes de começar

Antes de usar o Firebase Authentication, você precisa:

  • registrar seu projeto do Unity e configurá-lo para usar o Firebase.

    • Se o projeto do Unity já usa o Firebase, ele já está registrado e configurado para essa plataforma.

    • Se você não tiver um projeto do Unity, faça o download de um app de exemplo.

  • Adicione o SDK do Firebase para Unity (especificamente FirebaseAuth.unitypackage) ao seu projeto do Unity.

Adicionar o Firebase ao projeto do Unity envolve tarefas no console do Firebase e no projeto aberto do Unity (por exemplo, baixar os arquivos de configuração do Firebase no console e movê-los para o projeto do Unity).

Acessar a classe Firebase.Auth.FirebaseAuth

A classe FirebaseAuth é o gateway para todas as chamadas de API. Ela pode ser acessada por meio de FirebaseAuth.DefaultInstance.
Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;

Criar uma conta baseada em senha

Para criar uma nova conta de usuário com uma senha, realize as seguintes etapas no código de login do app:

  1. Quando um novo usuário se inscrever pelo formulário do app, conclua qualquer etapa de validação de nova conta exigida pelo aplicativo, como verificar se a senha foi digitada corretamente e atende aos requisitos de complexidade.
  2. Crie uma conta enviando o endereço de e-mail e a senha do novo usuário para FirebaseAuth.CreateUserWithEmailAndPassword:
    auth.CreateUserWithEmailAndPasswordAsync(email, password).ContinueWith(task => {
      if (task.IsCanceled) {
        Debug.LogError("CreateUserWithEmailAndPasswordAsync was canceled.");
        return;
      }
      if (task.IsFaulted) {
        Debug.LogError("CreateUserWithEmailAndPasswordAsync encountered an error: " + task.Exception);
        return;
      }
    
      // Firebase user has been created.
      Firebase.Auth.AuthResult result = task.Result;
      Debug.LogFormat("Firebase user created successfully: {0} ({1})",
          result.User.DisplayName, result.User.UserId);
    });
    

Conectar um usuário com endereço de e-mail e senha

As etapas para um usuário fazer login com uma senha são semelhantes às de criação de uma nova conta. Na função de login do app, faça o seguinte:

  1. Quando um usuário fizer login no app, transmita o endereço de e-mail e a senha dele para FirebaseAuth.SignInWithEmailAndPassword:
    auth.SignInWithEmailAndPasswordAsync(email, password).ContinueWith(task => {
      if (task.IsCanceled) {
        Debug.LogError("SignInWithEmailAndPasswordAsync was canceled.");
        return;
      }
      if (task.IsFaulted) {
        Debug.LogError("SignInWithEmailAndPasswordAsync encountered an error: " + task.Exception);
        return;
      }
    
      Firebase.Auth.AuthResult result = task.Result;
      Debug.LogFormat("User signed in successfully: {0} ({1})",
          result.User.DisplayName, result.User.UserId);
    });
    
  2. Também é possível criar as credenciais e fazer login como nos outros fluxos de trabalho:
    Firebase.Auth.Credential credential =
        Firebase.Auth.EmailAuthProvider.GetCredential(email, password);
    auth.SignInAndRetrieveDataWithCredentialAsync(credential).ContinueWith(task => {
      if (task.IsCanceled) {
        Debug.LogError("SignInAndRetrieveDataWithCredentialAsync was canceled.");
        return;
      }
      if (task.IsFaulted) {
        Debug.LogError("SignInAndRetrieveDataWithCredentialAsync encountered an error: " + task.Exception);
        return;
      }
    
      Firebase.Auth.AuthResult result = task.Result;
      Debug.LogFormat("User signed in successfully: {0} ({1})",
          result.User.DisplayName, result.User.UserId);
    });
    

Recomendado: definir uma política de senha

É possível melhorar a segurança da conta aplicando requisitos de complexidade de senha.

Para configurar uma política de senha para seu projeto, abra a guia Política de senha na página "Configurações de autenticação" do console do Firebase:

Configurações de autenticação

As políticas de senha Firebase Authentication são compatíveis com os seguintes requisitos de senha:

  • É necessário usar letras minúsculas

  • Caractere maiúsculo obrigatório

  • Caractere numérico obrigatório

  • É necessário um caractere não alfanumérico

    Os caracteres a seguir atendem ao requisito de caracteres não alfanuméricos: ^ $ * . [ ] { } ( ) ? " ! @ # % & / \ , > < ' : ; | _ ~

  • Tamanho mínimo da senha (variando de 6 a 30 caracteres; o padrão é 6)

  • Tamanho máximo da senha (4.096 caracteres)

É possível ativar a aplicação da política de senha em dois modos:

  • Exigir: não será possível se inscrever até que o usuário atualize a senha de acordo com sua política.

  • Notificar: os usuários podem se inscrever com uma senha que não está em conformidade com sua política. Ao usar esse modo, verifique se a senha do usuário está em conformidade com a política no lado do cliente e solicite que o usuário atualize a senha se ela não estiver em compliance.

Os novos usuários sempre precisam escolher uma senha que esteja em conformidade com sua política.

Se você tiver usuários ativos, recomendamos não ativar o upgrade forçado no login, a menos que tenha a intenção de bloquear o acesso de usuários com senhas que não obedecem à sua política. Em vez disso, use o modo de notificação, que permite que os usuários façam login com as senhas atuais e informa os requisitos que faltam na senha.

Recomendado: ativar a proteção contra enumeração de e-mails

Alguns métodos Firebase Authentication que usam endereços de e-mail como parâmetros vão gerar erros específicos se o endereço de e-mail não estiver registrado quando deveria estar (por exemplo, ao fazer login com um endereço de e-mail e uma senha) ou estiver registrado quando não deveria ser usado (por exemplo, ao alterar o endereço de e-mail de um usuário). Embora esses métodos sejam úteis para sugerir soluções específicas aos usuários, eles também podem ser usados indevidamente por agentes mal-intencionados para descobrir os endereços de e-mail registrados.

Para mitigar esse risco, recomendamos ativar a proteção contra enumeração de e-mails no seu projeto usando a ferramenta gcloud do Google Cloud. Como a ativação desse recurso muda o comportamento dos relatórios de erro do Firebase Authentication, verifique se o app não se baseia em erros mais específicos.

Próximas etapas

Após o primeiro login do usuário, uma nova conta é criada e vinculada às credenciais, que podem ser o nome e a senha, o número de telefone ou as informações do provedor de autenticação com o qual o usuário fez login. Essa nova conta é armazenada como parte do projeto do Firebase e pode ser usada para identificar um usuário em todos os apps do projeto, seja qual for o método de login utilizado.

  • Nos seus apps, use o objeto Firebase.Auth.FirebaseUser para receber as informações básicas de perfil do usuário.

    Firebase.Auth.FirebaseUser user = auth.CurrentUser;
    if (user != null) {
      string name = user.DisplayName;
      string email = user.Email;
      System.Uri photo_url = user.PhotoUrl;
      // The user's Id, unique to the Firebase project.
      // Do NOT use this value to authenticate with your backend server, if you
      // have one; use User.TokenAsync() instead.
      string uid = user.UserId;
    }
    
  • Nas Regras de segurança Firebase Realtime Database e Cloud Storage, você pode acessar o ID exclusivo do usuário conectado pela variável auth e usar essas informações para controlar quais dados um usuário pode acessar.

Os usuários podem fazer login no app usando vários provedores de autenticação. Basta vincular as credenciais desses provedores a uma conta de usuário.

Para desconectar um usuário, chame SignOut():

auth.SignOut();