login method

Future<bool> login({
  1. required String user,
  2. required String pass,
})

Implementation

Future<bool> login({
  required String user,
  required String pass,
}) async {
  try {
    console.log('Iniciando login para usuario: $user');
    // realiza la consulta
    var r = await ChalonaApp.current.request(
      '/login',
      data: {
        'user': user,
        'pass': pass,
        'app': app,
        'project': project,
      },
    );

    console.log('Respuesta de login recibida');
    console.log(r.data);
    reset(r.data);

    _token = r.data['token'];
    if (_token.isEmpty) {
      throw Exception('Token vacío en respuesta de login');
    }

    if (ChalonaStorage.current == null) {
      throw Exception('ChalonaStorage no esta inicializado');
    } else {
      console.log('Guardando token y datos de sesión');
      await ChalonaStorage.current?.set('token', _token);
      await ChalonaStorage.current?.setMap('session', r.data);
      var jj = await ChalonaStorage.current?.getMap('session');
      console.log(jj);
      console.log('Token y datos de sesión guardados');
    }

    onStartSession.trigger();
    console.log('Sesión iniciada correctamente');
    return true;
  } catch (e) {
    console.error('Error en login:');
    if (e is ChalonaResponse) {
      console.error(e.msg);
    } else {
      console.error(e.toString());
    }

    // Limpiar estado en caso de error
    _token = '';
    if (ChalonaStorage.current != null) {
      console.log('Limpiando datos de sesión por error');
      await ChalonaStorage.current?.unset('token');
      await ChalonaStorage.current?.unset('session');
    }
    return false;
  }
}