Autenticação anônima com o Firebase usando JavaScript

Use o Firebase Authentication para criar e usar contas anônimas temporárias e fazer a autenticação no Firebase. Com essas contas, os usuários que ainda não se registraram no seu app podem trabalhar com os dados protegidos pelas regras de segurança. Se um usuário anônimo se registrar no seu app, vincule as credenciais de login à conta anônima para que ele continue trabalhando com os dados protegidos nas sessões futuras.

Antes de começar

  1. Adicione o Firebase ao seu projeto do JavaScript.
  2. Caso você ainda não tenha conectado o app ao projeto do Firebase, faça isso no Console do Firebase.
  3. Ative a autenticação anônima:
    1. No Console do Firebase, abra a seção Auth.
    2. Na página Métodos de login, ative a opção Anônimo.
    3. Opcional: se o projeto teve upgrade para o Firebase Authentication com o Identity Platform, você pode ativar a limpeza automática. Quando você faz isso, contas anônimas com mais de 30 dias são automaticamente excluídas. Em projetos com a limpeza automática ativada, a autenticação anônima não é mais contabilizada nos limites de uso ou nas cotas de faturamento. Consulte Limpeza automática.

Fazer a autenticação anônima no Firebase

Quando um usuário não conectado acessar um recurso do app que exige autenticação no Firebase, faça login dele anonimamente executando as etapas a seguir:

  1. Chame o método signInAnonymously:

    API modular da Web

    import { getAuth, signInAnonymously } from "firebase/auth";
    
    const auth = getAuth();
    signInAnonymously(auth)
      .then(() => {
        // Signed in..
      })
      .catch((error) => {
        const errorCode = error.code;
        const errorMessage = error.message;
        // ...
      });

    API com namespace da Web

    firebase.auth().signInAnonymously()
      .then(() => {
        // Signed in..
      })
      .catch((error) => {
        var errorCode = error.code;
        var errorMessage = error.message;
        // ...
      });
    Também é aqui que você identifica e corrige erros. Para ver uma lista de códigos de erro, consulte os Documentos de referência de autenticação.
  2. Se o método signInAnonymously for concluído sem erros, o observador registrado em onAuthStateChanged será acionado. Em seguida, será possível acessar os dados da conta do usuário anônimo com o objeto User:

    API modular da Web

    import { getAuth, onAuthStateChanged } from "firebase/auth";
    
    const auth = getAuth();
    onAuthStateChanged(auth, (user) => {
      if (user) {
        // User is signed in, see docs for a list of available properties
        // https://firebase.google.com/docs/reference/js/auth.user
        const uid = user.uid;
        // ...
      } else {
        // User is signed out
        // ...
      }
    });

    API com namespace da Web

    firebase.auth().onAuthStateChanged((user) => {
      if (user) {
        // User is signed in, see docs for a list of available properties
        // https://firebase.google.com/docs/reference/js/v8/firebase.User
        var uid = user.uid;
        // ...
      } else {
        // User is signed out
        // ...
      }
    });

Converter uma conta anônima em permanente

Quando um usuário anônimo se inscreve no seu app, ele pode continuar trabalhando com a nova conta. Por exemplo, você pode deixar no carrinho de compras dessa conta os itens adicionados antes do registro. Para isso, execute as seguintes etapas:

  1. Quando o usuário se inscrever, conclua o fluxo de login do provedor de autenticação do usuário até a chamada de um dos métodos Auth.signInWith, mas sem incluir essa etapa. Por exemplo, use o token de ID do Google, o token de acesso do Facebook ou o e-mail e a senha.
  2. Consiga um AuthCredential para o novo provedor de autenticação:

    Login do Google

    API modular da Web

    import { GoogleAuthProvider } from "firebase/auth";
    
    const credential = GoogleAuthProvider.credential(
      googleUser.getAuthResponse().id_token);

    API com namespace da Web

    var credential = firebase.auth.GoogleAuthProvider.credential(
      googleUser.getAuthResponse().id_token);
    Login do Facebook

    API modular da Web

    import { FacebookAuthProvider } from "firebase/auth";
    
    const credential = FacebookAuthProvider.credential(
      response.authResponse.accessToken);

    API com namespace da Web

    var credential = firebase.auth.FacebookAuthProvider.credential(
      response.authResponse.accessToken);
    Login com e-mail/senha

    API modular da Web

    import { EmailAuthProvider } from "firebase/auth";
    
    const credential = EmailAuthProvider.credential(email, password);

    API com namespace da Web

    var credential = firebase.auth.EmailAuthProvider.credential(email, password);
  3. Transmita AuthCredential para o método link do usuário que fez login:

    API modular da Web

    import { getAuth, linkWithCredential } from "firebase/auth";
    
    const auth = getAuth();
    linkWithCredential(auth.currentUser, credential)
      .then((usercred) => {
        const user = usercred.user;
        console.log("Anonymous account successfully upgraded", user);
      }).catch((error) => {
        console.log("Error upgrading anonymous account", error);
      });

    API com namespace da Web

    auth.currentUser.linkWithCredential(credential)
      .then((usercred) => {
        var user = usercred.user;
        console.log("Anonymous account successfully upgraded", user);
      }).catch((error) => {
        console.log("Error upgrading anonymous account", error);
      });

Se a chamada a link for realizada corretamente, a nova conta do usuário terá acesso aos dados do Firebase da conta anônima.

Limpeza automática

Se você fez upgrade do projeto para o Firebase Authentication com o Identity Platform, então é possível ativar a limpeza automática no Console do Firebase. Quando esse recurso é ativado, você permite que o Firebase exclua automaticamente contas anônimas com mais de 30 dias. Em projetos com a limpeza automática ativada, a autenticação anônima não é contabilizada nos limites de uso ou nas cotas de faturamento.

  • Todas as contas anônimas criadas após a ativação da limpeza automática podem ser excluídas automaticamente a qualquer momento 30 dias após a criação.
  • As contas anônimas criadas antes da limpeza automática estarão qualificadas para exclusão automática 30 dias após a ativação.
  • Se você desativar a limpeza automática, todas as contas anônimas programadas para serem excluídas vão manter essa programação. Essas contas não são contabilizadas nos limites de uso ou nas cotas de faturamento.
  • Se você fizer "upgrade" de uma conta anônima com vinculação a qualquer método de login, ela não vai ser excluída automaticamente.

Se quiser conferir quantos usuários serão afetados antes de ativar esse recurso e tiver atualizado o projeto para o Firebase Authentication com o Identity Platform, filtre por is_anon no Cloud Logging.

Próximas etapas

Agora que os usuários podem se autenticar com o Firebase, use as regras do Firebase para controlar os acessos ao banco de dados.