Files
pagasis/backend/login_fix_summary.py
T
2025-10-21 22:08:48 -06:00

103 lines
3.8 KiB
Python

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
Script para mostrar resumen de la corrección del login.
"""
import os
import sys
import django
# Configurar Django
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mac_attendance.settings')
django.setup()
from django.contrib.auth.models import User
from authentication.models import UserProfile
def login_fix_summary():
"""Mostrar resumen de la corrección del login"""
print("=" * 80)
print("RESUMEN - CORRECCIÓN DEL SISTEMA DE LOGIN")
print("=" * 80)
print()
print("[PROBLEMA IDENTIFICADO]")
print(" ✗ Error en authentication/serializers.py línea 38")
print(" ✗ AttributeError: 'NoneType' object has no attribute 'is_active'")
print(" ✗ El código asumía que todos los UserProfile tienen un User asociado")
print(" ✗ Los estudiantes importados solo tienen UserProfile sin User")
print()
print("[SOLUCIÓN IMPLEMENTADA]")
print(" ✓ Modificado authentication/serializers.py")
print(" ✓ Verificación de user == None antes de acceder a is_active")
print(" ✓ Creación automática de User para estudiantes al hacer login")
print(" ✓ Los estudiantes ahora obtienen un User de Django automáticamente")
print()
print("[CÓDIGO AGREGADO]")
print(" Líneas 40-53 en serializers.py:")
print(" - if user is None:")
print(" - Si es estudiante: crear User automáticamente")
print(" - Si es asistente sin User: rechazar login")
print(" - Asociar User con UserProfile")
print()
print("[ESTADO ACTUAL]")
print()
# Contar estudiantes
total_students = UserProfile.objects.filter(user_type='student').count()
students_with_user = UserProfile.objects.filter(user_type='student', user__isnull=False).count()
students_without_user = total_students - students_with_user
print(f" Total de estudiantes en BD: {total_students}")
print(f" Estudiantes con User asociado: {students_with_user}")
print(f" Estudiantes sin User (se creará al login): {students_without_user}")
print()
# Mostrar algunos estudiantes de ejemplo
print("[ESTUDIANTES DE PRUEBA]")
test_students = UserProfile.objects.filter(
user_type='student',
account_number__in=['32114471', '32116578', '31732062', '32119639']
)
for student in test_students:
has_user = "✓" if student.user else "✗"
print(f" {has_user} {student.account_number} - {student.full_name}")
if student.user:
print(f" User Django: {student.user.username}")
print()
print("[PRUEBAS REALIZADAS]")
print(" ✓ Login exitoso con cuenta 32114471 (Lopez Martinez Valeria)")
print(" ✓ Login exitoso con cuenta 32116578 (Barrera Sanchez Alem Isaias)")
print(" ✓ Error apropiado con cuenta inexistente (99999999)")
print(" ✓ Tokens JWT generados correctamente")
print()
print("[RESULTADO]")
print(" ✅ El sistema de login funciona correctamente")
print(" ✅ Los estudiantes pueden iniciar sesión con su número de cuenta")
print(" ✅ Se crea automáticamente un User de Django al primer login")
print(" ✅ La conexión frontend-backend está funcionando")
print()
print("=" * 80)
print("✓ SISTEMA DE LOGIN CORREGIDO Y FUNCIONANDO")
print("=" * 80)
print()
print("INSTRUCCIONES PARA EL USUARIO:")
print(" 1. Accede al frontend en http://localhost")
print(" 2. Ingresa cualquier número de cuenta de 8 dígitos existente")
print(" 3. El sistema creará automáticamente tu sesión")
print(" 4. Ejemplos de cuentas que puedes usar:")
print(" - 32114471 (Lopez Martinez Valeria)")
print(" - 32116578 (Barrera Sanchez Alem Isaias)")
print(" - 31732062 (Villanueva Rubio Brandon Luis)")
print()
if __name__ == "__main__":
login_fix_summary()