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
Na raiz do seu projeto do Flutter, execute o seguinte comando para instalar o plug-in:
flutter pub add firebase_auth
Após a conclusão, recrie seu aplicativo do Flutter:
flutter run
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:
Para se conectar ao emulador, adicione uma linha de código à configuração de teste do app.
Execute
firebase emulators:start
na raiz do diretório do projeto local.Use a interface do Pacote de emuladores locais para fazer uma prototipagem interativa ou a API REST do emulador do Authentication para fazer 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); //... }
Tenha acesso a um guia detalhado em Conecte seu aplicativo ao emulador do Authentication. 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.