Conecte seu aplicativo ao emulador de autenticação

Antes de usar o emulador de autenticação com você aplicativo, certifique-se de compreender o fluxo de trabalho global Firebase local Emulator Suíte , e que você instalar e configurar o emulador Suíte local e rever os seus comandos CLI .

O que posso fazer com o emulador de autenticação?

O emulador de autenticação oferece alta fidelidade de emulação local de serviços de autenticação Firebase, proporcionando grande parte da funcionalidade encontrada em Firebase Autenticação de produção . Emparelhado com os SDKs do Firebase para iOS, Android e web, o emulador permite:

  • Crie, atualize e gerencie contas de usuário emuladas para testar e-mail / senha, número de telefone / SMS e login com provedores de identidade de terceiros (como o Google)
  • Ver e editar usuários emulados
  • Verifique as mensagens relacionadas à autenticação na guia Logs de IU do emulador.

Escolha um projeto Firebase

O Firebase Local Emulator Suite emula produtos para um único projeto Firebase.

Para selecionar o projeto para o uso, antes de iniciar os emuladores, na CLI prazo firebase use em seu diretório de trabalho. Ou, você pode passar o --project bandeira para cada comando emulador.

Local Emulator Suite suporta emulação de projetos Firebase reais e de demonstração projetos.

Tipo de projeto Recursos Use com emuladores
Real

Um projeto Firebase real é aquele que você criou e configurou (provavelmente por meio do console do Firebase).

Projetos reais têm recursos ativos, como instâncias de banco de dados, intervalos de armazenamento, funções ou qualquer outro recurso configurado para esse projeto do Firebase.

Ao trabalhar com projetos reais do Firebase, você pode executar emuladores para qualquer um ou todos os produtos compatíveis.

Para quaisquer produtos que não estão emulando, seus aplicativos e código irá interagir com o recurso ao vivo (instância de banco de dados, balde de armazenamento, função, etc.).

Demo

Um projeto Firebase demo tem nenhuma configuração Firebase real e sem recursos vivos. Esses projetos geralmente são acessados ​​por meio de codelabs ou outros tutoriais.

Projeto IDs para demonstração projetos têm o demo- prefixo.

Ao trabalhar com demonstração projectos Firebase, seus aplicativos e interagir código com apenas emuladores. Se seu aplicativo tentar interagir com um recurso para o qual não há um emulador em execução, esse código falhará.

Recomendamos que você use projetos de demonstração sempre que possível. Os benefícios incluem:

  • Configuração mais fácil, já que você pode executar os emuladores sem nunca criar um projeto Firebase
  • Segurança mais forte, já que se seu código invocar acidentalmente recursos não emulados (produção), não há chance de alteração de dados, uso e faturamento
  • Melhor suporte offline, já que não há necessidade de acessar a internet para baixar a configuração do SDK.

Instrumentar seu aplicativo para falar com o emulador de autenticação

Android, iOS e SDKs da web

Defina sua configuração no aplicativo ou classes de teste para interagir com o emulador de autenticação da seguinte maneira.

Android
FirebaseAuth.getInstance().useEmulator('10.0.2.2', 9099);
iOS - Swift
Auth.auth().useEmulator(withHost:"localhost", port:9099)

Versão 9 da web

import { getAuth, connectAuthEmulator } from "firebase/auth";

const auth = getAuth();
connectAuthEmulator(auth, "http://localhost:9099");

Versão 8 da web

const auth = firebase.auth();
auth.useEmulator("http://localhost:9099");

Nenhuma configuração adicional é necessária para prototipar e testar as interações entre Authentication e Cloud Functions ou Firebase Security Rules para Cloud Firestore ou Realtime Database. Quando o emulador de autenticação é configurado e outros emuladores estão em execução, eles trabalham juntos automaticamente.

SDK Admin

O Firebase administração SDK liga automaticamente para o emulador de autenticação quando o FIREBASE_AUTH_EMULATOR_HOST variável de ambiente é definida.

export FIREBASE_AUTH_EMULATOR_HOST="localhost:9099"

Observe que o emulador do Cloud Functions reconhece automaticamente o emulador do Authentication, portanto, você pode pular esta etapa ao testar as integrações entre o Cloud Functions e os emuladores do Authentication. A variável de ambiente será definida automaticamente para o SDK Admin no Cloud Functions.

Com o conjunto variável de ambiente, Firebase Administrador SDKs aceitará não assinados biscoitos ID tokens e sessão emitidos pelo emulador de autenticação (via verifyIdToken e createSessionCookie métodos respectivamente) para facilitar developmemt e teste local. Por favor, certifique-se de não definir a variável de ambiente na produção.

Ao se conectar ao emulador de autenticação, você precisará especificar um ID de projeto. Você pode passar um ID de projeto para initializeApp diretamente ou definir o GCLOUD_PROJECT variável de ambiente. Observe que você não precisa usar seu ID de projeto real do Firebase; o emulador de autenticação aceitará qualquer ID de projeto.

Node.js Admin SDK
admin.initializeApp({ projectId: "your-project-id" });
Variável de ambiente
export GCLOUD_PROJECT="your-project-id"

Tokens de identificação

Por razões de segurança, a autenticação emulador emite tokens de identificação não assinados, que só são aceites por outros emuladores Firebase, ou o Firebase administração SDK quando configurado . Esses tokens serão rejeitados pelos serviços de produção do Firebase ou pelo SDK Admin do Firebase em execução no modo de produção (por exemplo, o comportamento padrão sem as etapas de configuração descritas acima).

Para começar a prototipagem interativa com o emulador de autenticação e a IU do Emulator Suite, inicie o Firebase Local Emulator Suite.

firebase emulators:start

Para a autenticação anônima, o aplicativo pode exercer o sign-in lógica para sua plataforma ( iOS , Android , web ).

Para a autenticação de e-mail / senha, você pode começar a prototipagem através da adição de contas de usuário para o emulador de autenticação do seu aplicativo usando métodos de autenticação do SDK, ou usando o emulador Suíte UI.

  1. No emulador Suíte UI, clique na guia Autenticação.
  2. Clique no botão Adicionar usuário.
  3. Siga o assistente de criação de conta de usuário, preenchendo os campos de autenticação de e-mail.

Com um usuário de teste criado, o aplicativo pode assinar o usuário dentro e fora com o SDK lógica para sua plataforma ( iOS , Android , web ).

Para os testes de verificação de e-mail / sign-in com flui link de email, o emulador imprime uma URL para o terminal em que firebase emulators:start foi executado.

i  To verify the email address customer@ex.com, follow this link:
http://localhost:9099/emulator/action?mode=verifyEmail&lang=en&oobCode=XYZ123&apiKey=fake-api-key

Cole o link em seu navegador para simular o evento de verificação e verifique se a verificação foi bem-sucedida.

{
  "authEmulator": {
    "success": "The email has been successfully verified.",
    "email": "customer@example.com"
  }
}

Para testar redefinições de senha, o emulador imprime uma URL similar, incluindo um parâmetro newPassword (que você pode mudar, se necessário), para o terminal.

http://localhost:9099/emulator/action?mode=resetPassword&oobCode=XYZ!23&apiKey=fake-api-key&newPassword=YOUR_NEW_PASSWORD

Teste não interativo

Em vez de usar a IU do Emulator Suite ou o código do cliente para gerenciar contas de usuário de e-mail / senha, você pode escrever scripts de configuração de teste que chamam APIs REST para criar e excluir contas de usuário e buscar códigos de verificação de e-mail fora da banda para preencher a verificação de e-mail do emulador URL Isso mantém a plataforma e o código de teste separados e permite que você teste de forma não interativa.

Para fluxos de teste de senha e email não interativos, a sequência típica é a seguinte.

  1. Criar usuários com a autenticação endpoint inscrição RESTO .
  2. Faça login de usuários usando e-mails e senhas para realizar testes.
  3. Se for aplicável aos seus testes, buscar disponíveis out-of-band códigos de verificação de e-mail do Endpont RESTO específicos do emulador .
  4. Registros do usuário nivelada com o terminal REST específicos do emulador para os dados de compensação.

Autenticação de telefone / SMS emulada

Para autenticação por telefone, o emulador Auth não oferece suporte a:

  • Fluxos de reCAPTCHA e APN. Uma vez configurado para interagir com o emulador, SDK cliente desactivar estes métodos de verificação de um modo semelhante ao descrito para o teste de integração ( IOS , Android , Web ).
  • Teste os números de telefone com códigos pré-configurados no console do Firebase.

Caso contrário, em termos de código de cliente, o fluxo de autenticação telefone / SMS é idêntico ao descrito para a produção ( iOS , Android , web ).

Usando a IU do Emulator Suite:

  1. No emulador Suíte UI, clique na guia Autenticação.
  2. Clique no botão Adicionar usuário.
  3. Siga o assistente de criação de conta de usuário, preenchendo os campos de autenticação do telefone.

No entanto, para fluxos de autenticação por telefone, o emulador NÃO acionará a entrega de nenhuma mensagem de texto, uma vez que entrar em contato com uma operadora está fora do escopo e não é amigável para testes locais! Em vez disso, o emulador imprime o código que teria sido enviado via SMS para o mesmo terminal no qual você executou firebase emulators:start ; insira este código no aplicativo para simular os usuários verificando suas mensagens de texto.

Teste não interativo

Para teste de autenticação de telefone não interativo, use a API REST do emulador de autenticação para recuperar os códigos SMS disponíveis. Observe que o código é diferente a cada vez que você inicia o fluxo.

A seqüência típica é a seguinte.

  1. Chamada plataforma signInWithPhoneNumber para iniciar o processo de verificação.
  2. Recuperar o código de verificação usando o terminal REST específicos do emulador .
  3. Chamada confirmationResult.confirm(code) como de costume com o código de verificação.

Autenticação emulada de provedor de identidade de terceiros (IDP)

O emulador de autenticação permite que você teste muitos fluxos de autenticação de terceiros em seus aplicativos iOS, Android ou web sem alterações do código de produção. Para exemplos de fluxos de autenticação, consulte a documentação para várias combinações de fornecedores e plataformas você pode usar em seu aplicativo .

De modo geral, você pode usar o Firebase SDK para autenticar de duas maneiras:

  • Seu aplicativo permite que o SDK lide com todo o processo de ponta a ponta, incluindo todas as interações com provedores de IDP terceirizados para recuperar credenciais.
  • Seu aplicativo recupera manualmente as credenciais de um provedor terceirizado usando o SDK desse terceiro e passa essas credenciais para o SDK de autenticação.

Mais uma vez, verifique o link de documentação acima e certifique-se de estar familiarizado com o fluxo - gerenciado pelo Firebase SDK vs. recuperação manual de credenciais - que deseja usar. O emulador de autenticação oferece suporte a testes de qualquer abordagem.

Teste de fluxos de IDP baseados no SDK do Firebase

Se o seu aplicativo usa qualquer fluxo Firebase SDK end-to-end, como OAuthProvider para sign-in com a Microsoft, GitHub, ou Yahoo, para o teste interativo, o emulador de autenticação serve uma versão local da página de login correspondente a ajudar você a testar autenticação de aplicações web que chamam a signinWithPopup ou signInWithRedirect método. Esta página de login servida localmente também aparece em aplicativos móveis, renderizados pela biblioteca de webview de sua plataforma.

O emulador cria contas de usuário de terceiros simuladas e credenciais conforme necessário à medida que o fluxo prossegue.

Teste de fluxos de IDP com recuperação manual de credenciais

Se você usar "manual" sign-in técnicas e chamar de sua plataforma signInWithCredentials método, então, como de costume, o aplicativo irá solicitar verdadeira sign-in de terceiros e recuperar as credenciais reais de terceiros.

Note-se que o emulador suporta apenas signInWithCredential autenticação de credenciais recuperados de login do Google, Apple e outros provedores que o uso ID fichas implementados como JSON Web Tokens (JWTs). Tokens de acesso (por exemplo, aqueles fornecidos pelo Facebook ou Twitter, que não são JWTs) não são suportados. A próxima seção discute uma alternativa nesses casos.

Teste não interativo

Uma abordagem para o teste não interativo é automatizar os cliques do usuário na página de login servida pelo emulador. Para aplicativos da web, use uma interface de controle como o WebDriver. Para dispositivos móveis, use as ferramentas de teste de IU da sua plataforma, como Espresso ou Xcode.

Alternativamente, você pode atualizar seu código para usar signInWithCredential (por exemplo, em um ramo de código) e usar um fluxo de token de autenticação com tokens de identificação falsos para contas em vez de credenciais reais.

  1. Retribua ou comente a parte do seu código que recupera idTokens do IDP; isso elimina a necessidade de inserir nomes de usuário e senhas reais durante seus testes e libera seus testes de cotas de API e limites de taxa no IDP.
  2. Em segundo lugar, utilizar uma string JSON literal no lugar do token para signInWithCredential . Usando o SDK da web como exemplo, você pode alterar o código para:
firebase.auth().signInWithCredential(firebase.auth.GoogleAuthProvider.credential(
  '{"sub": "abc123", "email": "foo@example.com", "email_verified": true}'
));

Quando usado com o emulador, este código irá autenticar com êxito um usuário com email foo@example.com pelo Google. Pense no subcampo como uma chave primária, que pode ser alterada para qualquer string, simulando a assinatura de diferentes usuários. Você pode substituir firebase.auth.GoogleAuthProvider com, por exemplo, new firebase.auth.OAuthProvider('yahoo.com') ou qualquer outro ID provedor que você quer zombar.

Qual o proximo?