fix(auth): flexibilizar login por email/usuario, asegurar hash admin123 y corregir cookies sobre HTTP
This commit is contained in:
@@ -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."""
|
||||
|
||||
Reference in New Issue
Block a user