|
@@ -1,8 +1,9 @@
|
|
|
import 'package:flutter/material.dart';
|
|
|
-import '../data/session/session_storage.dart'; // Asegúrate de importar SessionStorage
|
|
|
+import '../data/session/session_storage.dart';
|
|
|
import '../models/models.dart';
|
|
|
import '../services/login_service.dart';
|
|
|
import '../services/services.dart';
|
|
|
+import 'package:bcrypt/bcrypt.dart';
|
|
|
|
|
|
enum Status { uninitialized, authenticated, authenticating, unauthenticated }
|
|
|
|
|
@@ -14,41 +15,39 @@ class LoginViewModel extends ChangeNotifier {
|
|
|
bool _obscureText = true;
|
|
|
Usuario? _usuario;
|
|
|
int? _idUsuario;
|
|
|
- bool _isLoading = true; // Indica si está verificando la sesión
|
|
|
+ bool _isLoading = true;
|
|
|
|
|
|
- bool get isLoading => _isLoading; // Getter para el estado de carga
|
|
|
+ bool get isLoading => _isLoading;
|
|
|
|
|
|
// Getters
|
|
|
Usuario? get usuario => _usuario;
|
|
|
Map<String, dynamic>? get errores => _errores;
|
|
|
|
|
|
- Future<void> login(String correo) async {
|
|
|
+ Future<void> login(String correo, String contrasena) async {
|
|
|
try {
|
|
|
print("Iniciando proceso de login para: $correo");
|
|
|
|
|
|
List<Usuario> usuarios = await RepoService<Usuario>().obtenerTodos();
|
|
|
- print("Usuarios obtenidos de la base de datos: ${usuarios.length}");
|
|
|
-
|
|
|
Usuario? usuario = usuarios.firstWhere(
|
|
|
(usuario) => usuario.correo?.toLowerCase() == correo.toLowerCase(),
|
|
|
orElse: () => Usuario(),
|
|
|
);
|
|
|
|
|
|
- // Si el correo es válido
|
|
|
- if (usuario.id != 0) {
|
|
|
- print("Usuario encontrado: ${usuario.correo}, ID: ${usuario.id}");
|
|
|
- _status = Status.authenticated;
|
|
|
- _errores = null;
|
|
|
- _idUsuario = usuario.id;
|
|
|
-
|
|
|
- // Guardar el id del usuario en SessionStorage
|
|
|
- await SessionStorage().saveId(_idUsuario!);
|
|
|
- print("ID guardado en SharedPreferences: $_idUsuario");
|
|
|
-
|
|
|
- notifyListeners();
|
|
|
+ if (usuario.id != 0 && usuario.clave != null) {
|
|
|
+ bool esContrasenaValida = BCrypt.checkpw(contrasena, usuario.clave!);
|
|
|
+
|
|
|
+ if (esContrasenaValida) {
|
|
|
+ _status = Status.authenticated;
|
|
|
+ _errores = null;
|
|
|
+ _idUsuario = usuario.id;
|
|
|
+ await SessionStorage().saveId(_idUsuario!);
|
|
|
+ notifyListeners();
|
|
|
+ } else {
|
|
|
+ _errores = {'contrasena': 'Contraseña incorrecta'};
|
|
|
+ _status = Status.unauthenticated;
|
|
|
+ notifyListeners();
|
|
|
+ }
|
|
|
} else {
|
|
|
- print("Correo no válido: $correo");
|
|
|
- hasErrors = true;
|
|
|
_errores = {'correo': 'El correo no existe en el sistema'};
|
|
|
_status = Status.unauthenticated;
|
|
|
notifyListeners();
|
|
@@ -74,7 +73,7 @@ class LoginViewModel extends ChangeNotifier {
|
|
|
_status = Status.unauthenticated;
|
|
|
}
|
|
|
|
|
|
- _isLoading = false; // Termina el estado de carga
|
|
|
+ _isLoading = false;
|
|
|
notifyListeners();
|
|
|
}
|
|
|
|