Login funcionando

This commit is contained in:
LS
2025-03-24 14:50:42 -03:00
parent cccca2ef29
commit 0f4056fbff
5 changed files with 203 additions and 117 deletions

75
app.py
View File

@@ -37,7 +37,7 @@ def login_required(f):
def decorated_function(*args, **kwargs):
if 'user_id' not in session:
flash('Por favor, faça login para acessar esta página.', 'warning')
return redirect(url_for('login', next=request.url))
return redirect(url_for('login'))
return f(*args, **kwargs)
return decorated_function
@@ -59,16 +59,35 @@ def login():
password = request.form.get("password")
otp = request.form.get("otp")
# Log dos dados recebidos (sem a senha)
print(f"Tentativa de login - Username: {username}, OTP fornecido: {'Sim' if otp else 'Não'}")
user = db_session.query(Usuario).filter_by(username=username).first()
if user and user.check_password(password) and user.verify_otp(otp):
session['user_id'] = user.id # Usando a sessão do Flask
session['is_admin'] = user.is_admin
next_page = request.args.get('next')
flash('Login realizado com sucesso!', 'success')
return redirect(next_page or url_for('home'))
else:
flash('Credenciais inválidas', 'danger')
if not user:
print(f"Erro: Usuário '{username}' não encontrado")
flash('Usuário não encontrado', 'danger')
return render_template('login.html')
if not user.check_password(password):
print(f"Erro: Senha incorreta para o usuário '{username}'")
flash('Senha incorreta', 'danger')
return render_template('login.html')
if not user.verify_otp(otp):
print(f"Erro: Código OTP inválido para o usuário '{username}'")
print(f"OTP fornecido: {otp}")
print(f"OTP secret do usuário: {user.otp_secret}")
flash('Código OTP inválido', 'danger')
return render_template('login.html')
# Se chegou aqui, login bem sucedido
print(f"Login bem sucedido para o usuário '{username}'")
session['user_id'] = user.id
session['is_admin'] = user.is_admin
next_page = request.args.get('next')
flash('Login realizado com sucesso!', 'success')
return redirect(next_page or url_for('home'))
return render_template('login.html')
@@ -84,14 +103,36 @@ def logout():
@login_required
def home():
"""Página inicial do sistema"""
links = []
for rule in app.url_map.iter_rules():
if "GET" in rule.methods and has_no_empty_params(rule):
url = url_for(rule.endpoint, **(rule.defaults or {}))
endpoint_name = 'Início' if rule.endpoint == 'home' else rule.endpoint
links.append((url, endpoint_name))
return render_template('home.html', links=links)
try:
links = []
# Filtrar apenas as rotas que queremos mostrar
allowed_endpoints = {
'listar_militantes': 'Militantes',
'listar_cotas': 'Cotas',
'listar_pagamentos': 'Pagamentos',
'listar_materiais': 'Materiais',
'listar_vendas_jornal': 'Vendas de Jornal',
'listar_assinaturas': 'Assinaturas'
}
for rule in app.url_map.iter_rules():
if (rule.endpoint in allowed_endpoints and
"GET" in rule.methods and
len(rule.arguments) == 0): # Apenas rotas sem parâmetros
url = url_for(rule.endpoint)
nome = allowed_endpoints[rule.endpoint]
links.append((url, nome))
# Ordenar links pelo nome
links.sort(key=lambda x: x[1])
return render_template('home.html', links=links)
except Exception as e:
print(f"Erro na página inicial: {e}")
import traceback
traceback.print_exc()
flash('Erro ao carregar a página inicial', 'error')
return render_template('home.html', links=[])
# Rota para criar um novo militante
@app.route("/militantes/novo", methods=["GET", "POST"])