Roteiro

Python + Flask + Firebase Authentication

Aprenda a configurar login, cadastro, logout e gerenciamento de sessões com Firebase no Python.


Parte 1

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.

Parte 2

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):

Terminal (pip)
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:

authentication.py
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)
Parte 3

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:

templates/home.html
<!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:

app.py
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)
Parte 4

Execução, Demonstração & Conclusão

Passos Finais & Testes
  • Inicie o app: Execute o comando python app.py no 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.