Roteiro
Python + Flask + Firebase AuthenticationAprenda a configurar login, cadastro, logout e gerenciamento de sessões com Firebase no Python.
Configurações no Console do Firebase
1. Criar o Projeto Firebase
Acesse o Console do Firebase, faça login com sua conta do Google e crie um novo projeto dando o nome de sua preferência (ex: authenticate).
2. Registrar o App Web
Dentro do painel do seu projeto, clique no ícone de Web (</>), dê um apelido ao seu aplicativo e registre-o. Copie o dicionário de chaves do script gerado (você usará isso na variável config no Python).
3. Ativar Autenticação por E-mail & Senha
No menu esquerdo do Firebase Console, acesse Authentication, clique em Get Started (Começar), ative o provedor E-mail/Senha e salve.
Desenvolvimento em Python Puro
1. Instalação do Pacote & Inicialização
No seu terminal, instale a biblioteca de integração com o Firebase para Python (Pyrebase4):
pip install pyrebase4
Em seguida, crie um script de teste rápido (ex: authentication.py) para garantir que as conexões e recursos estão funcionando devidamente:
import pyrebase
# Dicionário de configuração copiado do console do seu Firebase
config = {
"apiKey": "SUA_API_KEY",
"authDomain": "seu-projeto.firebaseapp.com",
"projectId": "seu-projeto",
"storageBucket": "seu-projeto.appspot.com",
"messagingSenderId": "seu-sender-id",
"appId": "seu-app-id",
"databaseURL": "" # Deixe em branco se não estiver usando Realtime Database
}
# Inicialização do Firebase
firebase = pyrebase.initialize_app(config)
auth = firebase.auth()
# Credenciais de teste (senha deve ter no mínimo 6 dígitos)
email = "teste@exemplo.com"
password = "teste123"
try:
# 1. CRIAR USUÁRIO NO BANCO DE DADOS
# user = auth.create_user_with_email_and_password(email, password)
# print("Usuário criado:", user)
# 2. FAZER LOGIN
user = auth.sign_in_with_email_and_password(email, password)
print("Login Realizado! Dados retornados:", user)
# Pegando token de sessão e buscando informações da conta
info = auth.get_account_info(user['idToken'])
print("\nInformações Detalhadas da Conta:", info)
# 3. ENVIAR EMAIL DE VERIFICAÇÃO
# auth.send_email_verification(user['idToken'])
# 4. REDEFINIR SENHA
# auth.send_password_reset_email(email)
except Exception as e:
print("Ocorreu um erro:", e)
Integração Completa com Flask e Sessões
1. Estrutura de Pastas de um projeto Flask
Configure seu diretório de arquivos desta maneira para que o Flask possa ler os templates corretamente:
meu_app/
│
├── app.py # Arquivo Python com a lógica do servidor Flask
└── templates/ # Pasta obrigatória de templates html
└── home.html # Página web com o formulário de login
2. Código HTML do Painel de Login
Crie a interface visual simples em templates/home.html com campos apropriados para coletar as informações do usuário:
<!DOCTYPE html>
<html lang="pt-BR">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Login com Firebase</title>
</head>
<body>
<h2>Área de Acesso</h2>
<form action="/" method="POST">
<label>E-mail:</label><br>
<input type="email" name="email" required><br><br>
<label>Senha:</label><br>
<input type="password" name="password" required><br><br>
<input type="submit" value="Acessar">
</form>
</body>
</html>
3. Lógica do Servidor em Flask
Insira no arquivo app.py as funções que gerenciam as rotas do Flask, controlam o login e limpam a sessão do navegador ao deslogar:
from flask import Flask, session, render_template, request, redirect, url_for
import pyrebase
app = Flask(__name__)
# O Flask exige uma chave secreta para criptografar os dados da sessão do cookie
app.secret_key = "segredo_super_secreto_e_criptografado"
config = {
"apiKey": "SUA_API_KEY",
"authDomain": "seu-projeto.firebaseapp.com",
"projectId": "seu-projeto",
"storageBucket": "seu-projeto.appspot.com",
"messagingSenderId": "seu-sender-id",
"appId": "seu-app-id",
"databaseURL": ""
}
# Conecta ao Firebase
firebase = pyrebase.initialize_app(config)
auth = firebase.auth()
@app.route("/", methods=["GET", "POST"])
def index():
if request.method == "POST":
email = request.form.get("email")
password = request.form.get("password")
try:
# Tenta autenticar o usuário no Firebase
user = auth.sign_in_with_email_and_password(email, password)
# Salva o email na sessão se o login for bem sucedido
session['user'] = email
return redirect(url_for('index'))
except Exception as e:
# Retorna falha de autenticação
return "Falha ao realizar login. Credenciais incorretas."
# Se o usuário já tiver uma sessão ativa
if 'user' in session:
return f"Olá {session['user']}!
Fazer Logout"
# Caso não esteja logado, exibe formulário de acesso
return render_template("home.html")
# Rota de Logout
@app.route("/logout")
def logout():
# Limpa a variável "user" da sessão (pop remove de forma segura)
session.pop('user', None)
return redirect(url_for('index'))
if __name__ == "__main__":
app.run(host="0.0.0.0", port=5000, debug=True)
Execução, Demonstração & Conclusão
Passos Finais & Testes
-
Inicie o app: Execute o comando
python app.pyno terminal e acesse a url gerada (ex:http://127.0.0.1:5000). - Teste de Falha: Digite dados de usuário incorretos e confira se a mensagem de rejeição é exibida de modo controlado.
- Teste de Sucesso: Entre com o e-mail cadastrado no Firebase. A página de boas-vindas com a opção "Fazer Logout" será exibida na tela.
- Logout definitivo: Ao clicar no link de sair, as sessões do cookie serão limpas, impossibilitando que acessos diretos não autorizados persistam no navegador.