Confira as novidades do Firebase anunciadas no Google I/O 2022. Saiba mais

Introdução ao Firebase Authentication no Flutter

Conecte seu aplicativo ao Firebase

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

Adicionar o Firebase Authentication ao seu aplicativo

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

    flutter pub add firebase_auth
    
  2. Depois de concluído, reconstrua seu aplicativo Flutter:

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

    import 'package:firebase_auth/firebase_auth.dart';
    

Para usar um provedor de autenticação, você precisa ativá-lo no console do Firebase . Acesse a página Método de login na seção Firebase Authentication para ativar o login por e-mail/senha e quaisquer outros provedores de identidade que você deseja para seu aplicativo.

(Opcional) Protótipo e teste com o Firebase Local Emulator Suite

Antes de falar sobre como seu aplicativo autentica os usuários, vamos apresentar um conjunto de ferramentas que você pode usar para criar protótipos e testar a funcionalidade de autenticação: Firebase Local Emulator Suite. Se você estiver decidindo entre técnicas e provedores de autenticação, experimentar diferentes modelos de dados com dados públicos e privados usando Authentication e Firebase Security Rules ou criar protótipos de designs de IU de login, poder trabalhar localmente sem implantar serviços ao vivo pode ser uma ótima ideia .

Um emulador de autenticação faz parte do Local Emulator Suite, que permite que seu aplicativo interaja com o conteúdo e a configuração do banco de dados emulado, bem como, opcionalmente, com seus recursos de projeto emulados (funções, outros bancos de dados e regras de segurança).

Usar o emulador de autenticação envolve apenas algumas etapas:

  1. Adicionando uma linha de código à configuração de teste do seu aplicativo para se conectar ao emulador.

  2. A partir da raiz do diretório do projeto local, executando firebase emulators:start .

  3. Usando a IU do Local Emulator Suite para prototipagem interativa ou a API REST do emulador de autenticação para 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);
    //...
    }
    

Um guia detalhado está disponível em Conecte seu aplicativo ao emulador de autenticação . Para obter mais informações, consulte a introdução do Local Emulator Suite .

Agora vamos continuar com como autenticar usuários.

Verifique o estado de autenticação atual

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

O Firebase Auth permite que você se inscreva em tempo real nesse estado por meio de um Stream . Uma vez chamado, o fluxo 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 for alterado.

Existem três métodos para ouvir as alterações do estado de autenticação:

authStateChanges()

Para assinar essas alterações, chame o método authStateChanges() em sua instância do 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 ouvinte ter sido registrado.
  • Quando um usuário está conectado.
  • Quando o usuário atual é desconectado.

idTokenChanges()

Para assinar essas alterações, chame o método idTokenChanges() em sua instância do 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 ouvinte ter sido registrado.
  • Quando um usuário está conectado.
  • Quando o usuário atual é desconectado.
  • Quando há uma alteração no token do usuário atual.

userChanges()

Para assinar essas alterações, chame o método userChanges() em sua instância do 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 ouvinte ter sido registrado.
  • Quando um usuário está conectado.
  • Quando o usuário atual é desconectado.
  • 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()

Estado de autenticação persistente

Os SDKs do Firebase para todas as plataformas oferecem suporte pronto para uso para garantir que o estado de autenticação do usuário seja mantido nas reinicializações do aplicativo ou nos recarregamentos 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 aplicativo. O usuário pode limpar os dados armazenados em cache dos aplicativos usando as configurações do dispositivo, o que limpará qualquer estado existente armazenado.

Em plataformas web, o estado de autenticação do usuário é armazenado no armazenamento local . Se necessário, você pode alterar esse comportamento padrão para persistir apenas o estado de autenticação para a sessão atual ou não. Para definir essas configurações, chame o método setPersistence() . (Em plataformas nativas, um UnimplementedError será lançado.)

// Disable persistence on web platforms
await FirebaseAuth.instance.setPersistence(Persistence.NONE);

Próximos passos

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