Primeiros passos com a autenticação Firebase no Flutter

Conecte seu aplicativo ao Firebase

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

Adicione o Firebase Authentication ao seu aplicativo

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

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

    flutter run
    
  3. Importe o plugin em seu código Dart:

    import 'package:firebase_auth/firebase_auth.dart';
    

Para usar um provedor de autenticação, você precisa habilitá-lo no console do Firebase . Vá para 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ê desejar para seu aplicativo.

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

Antes de falar sobre como seu aplicativo autentica 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, experimentando diferentes modelos de dados com dados públicos e privados usando autenticação e regras de segurança do Firebase ou criando protótipos de designs de UI de login, poder trabalhar localmente sem implantar serviços ativos pode ser uma ótima ideia .

Um emulador de autenticação faz parte do conjunto de emuladores locais, que permite que seu aplicativo interaja com o conteúdo e a configuração do banco de dados emulado, bem como, opcionalmente, com os recursos do projeto emulado (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 conectar-se ao emulador.

  2. Na raiz do diretório local do projeto, 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 explicando 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 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 nesse estado em tempo real 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 muda.

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

authStateChanges()

Para assinar essas alterações, chame o método authStateChanges() na sua 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 disparados quando ocorre o seguinte:

  • Logo após o ouvinte ter sido registrado.
  • Quando um usuário está conectado.
  • Quando o usuário atual está desconectado.

idTokenChanges()

Para assinar essas alterações, chame o método idTokenChanges() na sua 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 disparados quando ocorre o seguinte:

  • Logo após o ouvinte ter sido registrado.
  • Quando um usuário está conectado.
  • Quando o usuário atual está 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 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 disparados quando ocorre o seguinte:

  • Logo após o ouvinte ter sido registrado.
  • Quando um usuário está conectado.
  • Quando o usuário atual está 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 persista durante reinicializações de aplicativos ou recarregamentos de páginas.

Em plataformas nativas como Android e iOS, esse comportamento não é configurável e o estado de autenticação do usuário persistirá 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.

Nas plataformas web, o estado de autenticação do usuário é armazenado em IndexedDB . Você pode alterar a persistência para armazenar dados no armazenamento local usando Persistence.LOCAL . Se necessário, você pode alterar esse comportamento padrão para persistir apenas o estado de autenticação da sessão atual ou não persistir. Para definir essas configurações, chame o seguinte método FirebaseAuth.instanceFor(app: Firebase.app(), persistence: Persistence.LOCAL); . Você ainda pode atualizar a persistência para cada instância 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óximos passos

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