Programador Leigo
Flask 8 min leitura 10 MAR 2026

Flask-Login: autenticação de usuários em Python

Sessions, cookies assinados, user_loader e decorators: um guia completo para proteger suas rotas.


O que é o Flask-Login?

O Flask-Login é uma extensão do Flask que gerencia sessões de usuário. Ele cuida de tarefas como login, logout e proteção de rotas, sem que você precise reinventar a roda. A biblioteca trabalha com cookies assinados para manter o usuário autenticado entre requisições.

Para instalar, basta rodar:

pip install flask-login

A configuração inicial é simples:

from flask import Flask
from flask_login import LoginManager

app = Flask(__name__)
app.secret_key = "sua-chave-secreta-aqui"

login_manager = LoginManager()
login_manager.init_app(app)
login_manager.login_view = "login"

Como funciona a sessão

Quando um usuário faz login, o Flask-Login armazena o ID dele em um cookie assinado. A cada nova requisição, o navegador envia esse cookie de volta, e o Flask-Login usa esse ID para carregar o objeto do usuário na memória.

O cookie é assinado com a secret_key da aplicação. Isso significa que, mesmo que alguém intercepte o cookie, não consegue alterar o conteúdo sem invalidar a assinatura.

from flask_login import login_user, logout_user

@app.route("/login", methods=["POST"])
def login():
    email = request.form["email"]
    senha = request.form["senha"]
    usuario = Usuario.query.filter_by(email=email).first()

    if usuario and usuario.verificar_senha(senha):
        login_user(usuario)
        return redirect(url_for("dashboard"))

    flash("Credenciais inválidas.")
    return redirect(url_for("login"))

O user_loader: carregando o usuário

O user_loader é uma função obrigatória que você registra com o LoginManager. Ela recebe o ID do usuário (armazenado no cookie) e retorna o objeto correspondente do banco de dados.

@login_manager.user_loader
def load_user(user_id):
    return Usuario.query.get(int(user_id))

Essa função é chamada em toda requisição autenticada. Por isso, é importante que ela seja rápida. Se você tem muitos usuários simultâneos, considere usar cache com Redis para evitar consultas repetidas ao banco.

O modelo de usuário

Para funcionar com o Flask-Login, seu modelo de usuário precisa implementar algumas propriedades. O jeito mais fácil é herdar de UserMixin:

from flask_login import UserMixin
from werkzeug.security import generate_password_hash, check_password_hash

class Usuario(db.Model, UserMixin):
    id = db.Column(db.Integer, primary_key=True)
    email = db.Column(db.String(120), unique=True, nullable=False)
    senha_hash = db.Column(db.String(256), nullable=False)

    def definir_senha(self, senha):
        self.senha_hash = generate_password_hash(senha)

    def verificar_senha(self, senha):
        return check_password_hash(self.senha_hash, senha)

Protegendo rotas com @login_required

O decorator @login_required impede que usuários não autenticados acessem determinadas rotas. Se alguém tentar acessar sem estar logado, será redirecionado para a página de login.

from flask_login import login_required, current_user

@app.route("/dashboard")
@login_required
def dashboard():
    return f"Bem-vindo, {current_user.email}!"

O objeto current_user está disponível em qualquer rota e template. Ele representa o usuário logado na sessão atual.

Conclusão

O Flask-Login resolve o problema de autenticação de forma simples e segura. Com poucas linhas de código, você tem sessões baseadas em cookies assinados, proteção de rotas e acesso ao usuário logado em qualquer parte da aplicação. O próximo passo é combinar isso com cache (usando Redis, por exemplo) para ganhar performance em produção.

Continue lendo

Compartilhar