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
Na raiz do seu projeto Flutter, execute o seguinte comando para instalar o plugin:
flutter pub add firebase_auth
Depois de concluído, reconstrua seu aplicativo Flutter:
flutter run
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:
Adicionando uma linha de código à configuração de teste do seu aplicativo para conectar-se ao emulador.
Na raiz do diretório local do projeto, executando
firebase emulators:start
.Usando a IU do Local Emulator Suite para prototipagem interativa ou a API REST do emulador de autenticação para testes não interativos.
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.
- Um usuário entra ou autentica novamente depois que as declarações personalizadas são modificadas. O token de ID emitido como resultado conterá as reivindicações mais recentes.
- Uma sessão de usuário existente tem seu token de ID atualizado após a expiração de um token mais antigo.
- Um token de ID é atualizado à força chamando
FirebaseAuth.instance.currentUser.getIdTokenResult(true)
.
Para obter mais detalhes, consulte Propagando declarações personalizadas para o cliente
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()
-
idTokenChanges()
, userChanges()
e authStateChanges()
também não serão acionados se você desabilitar ou excluir o User
com o Firebase Admin SDK ou o Firebase console. Você terá que forçar uma recarga usando FirebaseAuth.instance.currentUser.reload()
, o que causará uma exceção user-disabled
ou user-not-found
que você pode capturar e manipular no código do seu aplicativo.
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.