O Firebase Authentication é uma das maneiras mais simples e seguras de adicionar autenticação a um aplicativo Flutter. Ele permite criar fluxos de login usando email/senha, autenticação com provedores como Google e Facebook, além de métodos anônimos ou personalizados. Neste guia, vamos mostrar como criar um sistema de login no Flutter com Firebase Auth usando email e senha, desde a configuração do Firebase até o código completo da tela de login.
Se você quer proteger seu app e oferecer uma boa experiência ao usuário, siga este passo a passo com boas práticas, dicas de segurança e exemplos práticos.
1. Configurando o Firebase no seu projeto Flutter
a) Criar o projeto no Firebase
- Acesse console.firebase.google.com
- Clique em “Adicionar projeto”
- Dê um nome, aceite os termos e crie o projeto
- No painel do projeto, clique em “Adicionar app” e escolha Flutter (use o ícone do Android/iOS)
b) Adicionar o Firebase ao seu app Flutter
No seu terminal:
flutter pub add firebase_core
flutter pub add firebase_auth
No arquivo main.dart, inicialize o Firebase:
import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/material.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
runApp(MyApp());
}
2. Ativando o método de login por email e senha
- No Firebase Console, vá em Authentication > Sign-in method
- Ative o provedor “Email/Password”
- Salve as alterações
3. Criando as funções de login e cadastro com Firebase Auth
a) Cadastro de usuário
import 'package:firebase_auth/firebase_auth.dart';
Future<void> cadastrarUsuario(String email, String senha) async {
try {
await FirebaseAuth.instance.createUserWithEmailAndPassword(
email: email,
password: senha,
);
print('Usuário cadastrado com sucesso!');
} catch (e) {
print('Erro ao cadastrar: $e');
}
}
b) Login de usuário
Future<void> fazerLogin(String email, String senha) async {
try {
await FirebaseAuth.instance.signInWithEmailAndPassword(
email: email,
password: senha,
);
print('Login realizado com sucesso!');
} catch (e) {
print('Erro ao fazer login: $e');
}
}
4. Criando a interface de login e cadastro
Aqui está um exemplo de interface simples:
class TelaLogin extends StatefulWidget {
@override
_TelaLoginState createState() => _TelaLoginState();
}
class _TelaLoginState extends State<TelaLogin> {
final _emailController = TextEditingController();
final _senhaController = TextEditingController();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('Login Firebase')),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
children: [
TextField(
controller: _emailController,
decoration: InputDecoration(labelText: 'Email'),
),
TextField(
controller: _senhaController,
decoration: InputDecoration(labelText: 'Senha'),
obscureText: true,
),
SizedBox(height: 20),
ElevatedButton(
onPressed: () {
fazerLogin(_emailController.text, _senhaController.text);
},
child: Text('Entrar'),
),
TextButton(
onPressed: () {
cadastrarUsuario(_emailController.text, _senhaController.text);
},
child: Text('Cadastrar-se'),
)
],
),
),
);
}
}
5. Boas práticas de segurança e UX
- Sempre valide o email e a senha antes de enviar (ex: min 6 caracteres)
- Use
try/catchpara exibir mensagens de erro claras ao usuário - Ative verificação de email no Firebase para maior segurança
- Use
StreamBuilderpara exibir diferentes telas com base no login (ex: tela de login ou home)
6. Monitorando o status do usuário logado
Para detectar se o usuário está logado ou não:
StreamBuilder<User?>(
stream: FirebaseAuth.instance.authStateChanges(),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return CircularProgressIndicator();
} else if (snapshot.hasData) {
return TelaPrincipal();
} else {
return TelaLogin();
}
},
);
FAQ — Perguntas Frequentes
Preciso pagar para usar o Firebase Auth?
Não. O Firebase oferece um plano gratuito (Spark) com limite de autenticações por mês.
Como faço logout do usuário?
Use:
await FirebaseAuth.instance.signOut();
Posso usar autenticação com Google ou Facebook também?
Sim. Basta ativar o provedor desejado no console do Firebase e usar os pacotes correspondentes no Flutter (google_sign_in, flutter_facebook_auth etc.).
O Firebase Auth armazena senhas?
Não diretamente. As senhas são protegidas com hash, criptografia e medidas de segurança avançadas.
Conteúdos relacionados
- Guia Prático para Usar Banco de Dados Firebase com Flutter
- Como Começar a Desenvolver com Flutter
- Por que Escolher a Linguagem Dart?
Não deixe de conferir a documentação oficial do flutter e também a documentação do firebase para continuar os seus estudos.




