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
Na raiz do seu projeto Flutter, execute o seguinte comando para instalar o plug-in:
flutter pub add firebase_auth
Depois de concluído, reconstrua seu aplicativo Flutter:
flutter run
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:
Adicionando uma linha de código à configuração de teste do seu aplicativo para se conectar ao emulador.
A partir da raiz do diretório do projeto local, 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 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.
- Um usuário entra ou se autentica novamente depois que as declarações personalizadas são modificadas. O token de ID emitido como resultado conterá as declarações mais recentes.
- Uma sessão de usuário existente obtém 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 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()
-
idTokenChanges()
, userChanges()
e authStateChanges()
também não serão acionados se você desativar ou excluir o User
com o SDK Admin do Firebase ou o Firebase console. Você terá que forçar um recarregamento 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 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 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 para a sessão atual ou não. 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.