Primeiros passos com o Firebase Authentication no Flutter

Conectar seu app ao Firebase

Instale e inicialize os SDKs do Firebase para Flutter, caso ainda não tenha feito isso.

Adicionar o Firebase Authentication ao seu app

  1. Na raiz do seu projeto do Flutter, execute o seguinte comando para instalar o plug-in:

    flutter pub add firebase_auth
    
  2. Após a conclusão, recrie seu aplicativo criado com o Flutter:

    flutter run
    
  3. Importe o plug-in no código Dart:

    import 'package:firebase_auth/firebase_auth.dart';
    

Para usar um provedor de autenticação, é necessário ativá-lo no Console do Firebase. Acesse a página "Método de login" na seção "Firebase Authentication" para ativar o login com e-mail/senha e outros provedores de identidade que você quer no seu app.

Criar protótipos e fazer testes com o Pacote de emuladores locais do Firebase (opcional)

Antes de obter informações sobre como o app autentica os usuários, confira o Pacote de emuladores locais do Firebase, um conjunto de ferramentas que podem ser usadas para criar protótipos e testar a funcionalidade do Authentication. Trabalhar no local sem implantar serviços ativos é uma ótima ideia se você estiver escolhendo técnicas e provedores de autenticação, testando modelos diferentes com dados públicos e privados usando o Authentication e as regras de segurança do Firebase ou criando protótipos de designs de IUs de login.

Um emulador do Authentication faz parte do Pacote de emuladores locais, que permite ao app interagir com o conteúdo e a configuração do banco de dados emulado e também com os recursos do projeto emulado (opcional), como funções, outros bancos de dados e regras de segurança.

O uso do emulador do Authentication envolve apenas algumas etapas:

  1. Para se conectar ao emulador, adicione uma linha de código à configuração de teste do app.

  2. Execute firebase emulators:start na raiz do diretório do projeto local.

  3. Use a IU do Pacote de emuladores locais para fazer uma prototipagem interativa ou use a API REST do emulador do Authentication para fazer testes não interativos.

  4. Chame useAuthEmulator() para especificar o endereço e a porta do emulador:

    Future<void> main() async {
    WidgetsFlutterBinding.ensureInitialized();
    await Firebase.initializeApp();
    
    // Ideal time to initialize
    await FirebaseAuth.instance.useAuthEmulator('localhost', 9099);
    //...
    }
    

Veja um guia detalhado em Conecte seu aplicativo ao emulador de autenticação. Para mais informações, consulte Introdução ao Pacote de emuladores locais do Firebase.

Agora veremos como autenticar os usuários.

Verificar o estado atual da autenticação

O Firebase Auth oferece muitos métodos e utilitários para integrar a autenticação segura ao seu aplicativo novo ou existente do Flutter. Em muitos casos, você precisará saber sobre o estado de autenticação do usuário, como se ele está conectado ou desconectado.

O Firebase Auth permite que você se inscreva em tempo real nesse estado usando uma Stream. Depois de chamado, o stream fornece um evento imediato do estado de autenticação atual do usuário e, em seguida, fornece eventos subsequentes sempre que o estado de autenticação muda.

Há três métodos para detectar alterações no estado de autenticação:

authStateChanges()

Para se inscrever para essas mudanças, chame o método authStateChanges() na instância FirebaseAuth:

FirebaseAuth.instance
  .authStateChanges()
  .listen((User? user) {
    if (user == null) {
      print('User is currently signed out!');
    } else {
      print('User is signed in!');
    }
  });

Os eventos são acionados quando ocorre o seguinte:

  • Logo após o listener ser registrado.
  • Quando um usuário está conectado.
  • Quando o usuário atual não está conectado.

idTokenChanges()

Para se inscrever para essas mudanças, chame o método idTokenChanges() na instância FirebaseAuth:

FirebaseAuth.instance
  .idTokenChanges()
  .listen((User? user) {
    if (user == null) {
      print('User is currently signed out!');
    } else {
      print('User is signed in!');
    }
  });

Os eventos são acionados quando ocorre o seguinte:

  • Logo após o listener ser registrado.
  • Quando um usuário está conectado.
  • Quando o usuário atual não está conectado.
  • Quando há uma alteração no token do usuário atual.

userChanges()

Para se inscrever para essas mudanças, chame o método userChanges() na instância FirebaseAuth:

FirebaseAuth.instance
  .userChanges()
  .listen((User? user) {
    if (user == null) {
      print('User is currently signed out!');
    } else {
      print('User is signed in!');
    }
  });

Os eventos são acionados quando ocorre o seguinte:

  • Logo após o listener ser registrado.
  • Quando um usuário está conectado.
  • Quando o usuário atual não está conectado.
  • Quando há uma alteração no token do usuário atual.
  • Quando os seguintes métodos fornecidos por FirebaseAuth.instance.currentUser são chamados:
    • reload()
    • unlink()
    • updateEmail()
    • updatePassword()
    • updatePhoneNumber()
    • updateProfile()

Como manter o estado da autenticação

Os SDKs do Firebase para todas as plataformas oferecem suporte imediato para garantir que o estado de autenticação do usuário continue após reinicializações do app ou atualizações de página.

Em plataformas nativas, como Android e iOS, esse comportamento não é configurável, e o estado de autenticação do usuário será mantido no dispositivo entre as reinicializações do app. O usuário pode limpar os dados em cache dos apps usando as configurações do dispositivo, o que exclui permanentemente os estados armazenados.

Nas plataformas da Web, o estado de autenticação do usuário é armazenado no IndexedDB. É possível alterar a persistência para salvar dados no armazenamento local usando Persistence.LOCAL. Se necessário, você pode mudar esse comportamento padrão para manter apenas o estado da autenticação da sessão atual ou não fazer nada. Para definir essas configurações, chame o método FirebaseAuth.instanceFor(app: Firebase.app(), persistence: Persistence.LOCAL);. Você ainda poderá atualizar a persistência de cada instância do Auth usando setPersistence(Persistence.NONE).

// Disable persistence on web platforms. Must be called on initialization:
final auth = FirebaseAuth.instanceFor(app: Firebase.app(), persistence: Persistence.NONE);
// To change it after initialization, use `setPersistence()`:
await auth.setPersistence(Persistence.LOCAL);

Próximas etapas

Conheça os guias sobre como fazer login e inscrever usuários com os serviços compatíveis de identidade e autenticação.