fix(auth): flexibilizar login por email/usuario, asegurar hash admin123 y corregir cookies sobre HTTP

This commit is contained in:
2026-09-23 14:59:46 -03:00
parent bddd382c96
commit b540015b7e
7 changed files with 47 additions and 20 deletions
+18 -3
View File
@@ -1,5 +1,5 @@
from typing import Optional, List
from sqlalchemy import func
from sqlalchemy import func, or_
from app.models.user import User
from app.repositories.base_repository import BaseRepository
@@ -10,10 +10,25 @@ class UserRepository(BaseRepository[User]):
super().__init__(User)
def get_by_email(self, email: str) -> Optional[User]:
"""Obtiene un usuario por su dirección de email normalizada."""
"""Obtiene un usuario por su dirección de email normalizada o alias de usuario."""
if not email:
return None
return User.query.filter(func.lower(User.email) == email.strip().lower()).first()
clean = email.strip().lower()
user = User.query.filter(func.lower(User.email) == clean).first()
if user:
return user
# Si el usuario ingresó solo el nombre de cuenta (ej. 'admin' o 'bedelia')
if '@' not in clean:
user = User.query.filter(
or_(
func.lower(User.email) == f"{clean}@edu-space.com",
func.lower(User.name) == clean,
func.lower(User.role) == clean.upper()
)
).first()
if user:
return user
return None
def get_active_users(self) -> List[User]:
"""Obtiene todos los usuarios con cuenta activa."""
+1 -1
View File
@@ -1647,7 +1647,7 @@ COPY public.subjects (id, code, name, description, department, credits, active,
--
COPY public.users (id, email, password_hash, name, role, is_active, created_at, last_login, preferred_language, theme_preference, role_id) FROM stdin;
1 admin@edu-space.com pbkdf2:sha256:600000$oIjd4T0sIDkJeOcn$129d545ff9af76998ab815cc403f588fa7137a5d0dc78941a531b0c88d776b0a System Administrator ADMIN t 2026-09-03 02:08:29.597255 2026-09-05 01:32:51.778156 es light 1
1 admin@edu-space.com pbkdf2:sha256:1000000$7UJAkGOl42ZHvDk8$f38ef5fe9b7247692b812abe9199df2d25c015e04b3807267b0f43536817f5c6 System Administrator ADMIN t 2026-09-03 02:08:29.597255 2026-09-05 01:32:51.778156 es light 1
3 carlostellocba@gmail.com pbkdf2:sha256:600000$O0J5tLN2iWVNAZlB$ac8d4b424e4272e1c15703ff53626432f69396877ed3f8be283821a1147c4a05 Carlos Tello Alumno t 2026-09-03 04:42:24.060312 2026-09-03 07:20:39.403354 \N dark 6
\.
+1 -3
View File
@@ -364,9 +364,7 @@ def init_database():
u_obj.role_id = r_match.id
u_obj.role = u_info['role_code']
u_obj.is_active = True
if not u_obj.check_password("admin123"):
u_obj.set_password("admin123")
print(f" [*] Clave de {u_info['email']} restablecida a 'admin123'.")
u_obj.set_password("admin123")
if not u_obj.preferred_language:
u_obj.preferred_language = "es"
if not u_obj.theme_preference: