Error en login de Preinscripcion 3.11

Quise poner en producción, que no lo había hecho aun, cuando ejecuto el comando:

root@debian-template:/usr/local/proyectos/preinscrip/3.11.0/bin# preinscripcion compilar_recursos
bash: preinscripcion: no se encontró la orden

eso me devuelve

Hola,

Quise poner en producción, que no lo había hecho aun, cuando ejecuto el comando:

root@debian-template:/usr/local/proyectos/preinscrip/3.11.0/bin# preinscripcion compilar_recursos
bash: preinscripcion: no se encontró la orden

eso me devuelve

Deberías correrlo con ./preinscripcion:

root@debian-template:/usr/local/proyectos/preinscrip/3.11.0/bin# ./preinscripcion compilar_recursos

saludos.
2

En cuanto al error de Apache, corre lo siguiente en consola y pasanos los que devuelve:

systemctl status apache2.service | grep Syntax

saludos.
2

Éste mensaje muestra al ejecutar el comando ./preinscripcion compilar_recursos :

No se pudo borrar el directorio ‘/usr/local/proyectos/preinscrip/3.11.0/instalacion/temp/alumno_imes’, el mismo no existe o no se tiene permisos para eliminarlo.
No se pudo borrar el directorio ‘/usr/local/proyectos/preinscrip/3.11.0/instalacion/temp/admin_imes’, el mismo no existe o no se tiene permisos para eliminarlo.

Cual puede ser el problema?

El comando systemctl status apache2.service | grep Syntax no me devolvió errores, el viernes eliminé links simbólicos a pruebas de instalación anteriores que yo habia de Siu gestión y autogestión que antes no daban problema en apache.

Hola

Estuvimos analizando el problema y la forma de replicarlo es hacer que se pierda la sesión del usuario después de autenticarse. Puede ser que tengan algún problema de permisos con la carpeta donde se guardan las sesiones. ¿Pueden revisar la carpeta que tienen seteada en la sentencia session.save_path del archivo php.ini? ¿Si apache tiene permisos para escribir en esa carpeta y si se están generando archivos de sesión al autenticar preinscripción?

Saludos!

Buen dia Sergio!

Al archivo php.ini de que carpeta te referis? porque busque y tengo un monton

root@debian-template:~# locate php.ini
/etc/php/5.6/apache2/php.ini
/etc/php/5.6/cli/php.ini
/etc/php/7.0/cli/php.ini
/etc/php/7.0/phpdbg/php.ini
/etc/php/7.1/apache2/php.ini.save
/etc/php/7.1/cli/php.ini.save
/etc/php/7.2/apache2/php.ini
/etc/php/7.2/cli/php.ini
/etc/php/7.2/cli/php.ini.save
/etc/php/7.2/phpdbg/php.ini
/etc/php/7.3/apache2/php.ini
/etc/php/7.3/cli/.php.ini.swp
/etc/php/7.3/cli/php.ini
/etc/php/7.3/fpm/php.ini
/etc/php/7.4/cli/php.ini
/home/imes/3.10.0/vendor/siu-toba/jasper/JavaBridge/WEB-INF/cgi/php.ini
/home/imes/prueba/vendor/siu-toba/jasper/JavaBridge/WEB-INF/cgi/php.ini
/usr/lib/php/5.6/php.ini-development
/usr/lib/php/5.6/php.ini-production
/usr/lib/php/5.6/php.ini-production.cli
/usr/lib/php/7.0/php.ini-development
/usr/lib/php/7.0/php.ini-production
/usr/lib/php/7.0/php.ini-production.cli
/usr/lib/php/7.1/php.ini-development
/usr/lib/php/7.1/php.ini-production
/usr/lib/php/7.1/php.ini-production.cli
/usr/lib/php/7.2/php.ini-development
/usr/lib/php/7.2/php.ini-production
/usr/lib/php/7.2/php.ini-production.cli
/usr/lib/php/7.3/php.ini-development
/usr/lib/php/7.3/php.ini-production
/usr/lib/php/7.3/php.ini-production.cli
/usr/lib/php/7.4/php.ini-development
/usr/lib/php/7.4/php.ini-production
/usr/lib/php/7.4/php.ini-production.cli
/usr/local/proyectos/g3/vendor/siu-toba/jasper/JavaBridge/WEB-INF/cgi/php.ini
/usr/local/proyectos/g3w3/vendor/siu-toba/jasper/JavaBridge/WEB-INF/cgi/php.ini
/usr/local/proyectos/guarani/vendor/doctrine/cache/tests/travis/php.ini
/usr/local/proyectos/guarani/vendor/siu-toba/jasper/JavaBridge/WEB-INF/cgi/php.ini
/usr/local/proyectos/guarani_prueba/vendor/siu-toba/jasper/JavaBridge/WEB-INF/cgi/php.ini
/usr/local/proyectos/preinscrip/3.11.0/vendor/siu-toba/jasper/JavaBridge/WEB-INF/cgi/php.ini

Cuando me indiques a cual carpeta te referís también podre ver si apache tiene permisos para escribir en esa carpeta.

Donde veo que se generen los archivos de sesión al autenticar preinscripción? En la carpeta logs? Si te referis a esa carpeta te puedo pasar todos los archivos que se generan.

Hola

Los datos seteados en session.save_path y que archivo php.ini toma el apache, lo pueden revisar del phpinfo que sugirió Leonel en la Respuesta#13 de este mismo foro

Saludos

Esto tenia en mi archivo /src/siu/www/index.php:

<?php require_once(realpath(dirname(__FILE__) . '/../bootstrap.php')); ini_set("memory_limit", "256M"); // Ver: http://php.net/manual/es/timezones.america.php date_default_timezone_set('America/Argentina/Buenos_Aires'); ini_set("default_charset", "ISO-8859-1"); \siu\bootstrap::cargar(); \SIU\Chulupi\nucleo\AccesoWeb::procesar(); [b]esta bien?[/b] Ahora puse lo que sugirió Leonel en ese archivo y ésto está seteado en: [b]session.save_path: /var/lib/php/sessions el archivo archivo php.ini toma el apache: /etc/php/7.3/apache2/php.ini[/b]

Hola

¿Cuando ingresan a preinscripcion, se estan generando archivos de este formato “sess_s5eqa5rnh3nc2tqbpm3brkd6vo” dentro de la carpeta /var/lib/php/sessions.?

¿Apache tiene permisos para grabar en esa carpeta?

Saludos!

Sergio la carpeta /var/lib/php/sessions estos son los permisos que tiene: -rwx-wx-wx como se pueden ver en la primer imagen que adjunto. Lo raro es que al intentar ingresar a la carpeta desde el winscp me dice: permiso denegado
Luego entre desde consola y puedo ver los archivos con el formato que me indicaste, tal como se ve en la 2da imagen que adjunto.

Hay que configurar algún archivo para que apache tenga permiso para grabar en dicha carpeta o la existencia de los archivos en el formato “sess_s5eqa5rnh3nc2tqbpm3brkd6vo” significa que apache ya tiene los permisos para escribir en la carpeta?

Aguardo tu respuesta.


permisos.png

permisos.png

permisos2.png

permisos2.png

Hola

Los permisos rwx-wx-wt root, significa que el único que puede leer en esa carpeta es root, por lo tanto seguramente apache puede estar escribiendo el archivo pero no lo puede leer para recuperar la sesión.

Deben darle permisos a la carpeta para que pueda leer apache, suponiendo que www-data es el usuario con el cual se ejecuta apache deben correr

$ sudo chown root:www-data /var/lib/php/sessions -R
$ sudo chmod 775 /var/lib/php/sessions -R

Prueben de esa manera, si sigue el error, envien el resultado de ejecutar el comando

$ ls -la /var/lib/php/sessions

Saludos!
2

El problema para loguearse continua a pesar de los permisos otorgados, el resultado del comando ls -la /var/lib/php/sessions es:

root@debian-template:~# ls -la /var/lib/php/sessions
total 128
drwxrwxr-x 2 root www-data 40960 oct 30 12:41 .
drwxr-xr-x 4 root root 4096 sep 28 2018 …
-rw------- 1 www-data www-data 33 oct 30 12:28 sess_19ai96so3dh5sknp28mhkpjd86
-rw------- 1 www-data www-data 32 oct 30 12:28 sess_209dol9ghf6tk1uecgr8535fh0
-rw------- 1 www-data www-data 21 oct 30 12:27 sess_2nmsiebuu3p1qh15paa9bt9g4n
-rw------- 1 www-data www-data 33 oct 30 12:24 sess_3a4sk7bhnkql3anjr8p95qjquo
-rw------- 1 www-data www-data 32 oct 30 12:41 sess_3g7goj9ou09115966e968g7vg9
-rw------- 1 www-data www-data 33 oct 30 12:28 sess_3lmpkhvp1jiq5ndd2vkmrrdvgi
-rw------- 1 www-data www-data 32 oct 30 12:26 sess_44gfck7cql7v83hp99us8o7as7
-rw------- 1 www-data www-data 21 oct 30 12:27 sess_47l8r6jo7gquie7tkr000h3hva
-rw------- 1 www-data www-data 33 oct 30 12:26 sess_4p7t17acidvvh03j1slslim4m7
-rw------- 1 www-data www-data 33 oct 30 12:36 sess_5r08s90uo43j8locuj2e3jrno2
-rw------- 1 www-data www-data 33 oct 30 12:27 sess_62a56t1giodqvt01sqslj812eg
-rw------- 1 www-data www-data 33 oct 30 12:28 sess_7hna9u4vicd47hprs0ha9epgm3
-rw------- 1 www-data www-data 33 oct 30 12:41 sess_eog4o23cidhj10nchph0oc7kfc
-rw------- 1 www-data www-data 33 oct 30 12:36 sess_fk5jgidnuikj128958bktbs3oj
-rw------- 1 www-data www-data 80 oct 30 12:36 sess_gknao2dmccn7abof6fuqoufnur
-rw------- 1 www-data www-data 230 oct 30 12:27 sess_i0s24nfp3mhebra9g1cchi8cju
-rw------- 1 www-data www-data 33 oct 30 12:34 sess_maj7cdnvsbt72g0naf1mc7k3gh
-rw------- 1 www-data www-data 33 oct 30 12:27 sess_pqjj290afko0iq4jloeacovt2q
-rw------- 1 www-data www-data 33 oct 30 12:27 sess_psiar5k0ch96uj657snrbee3q3
-rw------- 1 www-data www-data 33 oct 30 12:33 sess_psnklrnn7b51t413sm6q8psb9t
-rw------- 1 www-data www-data 33 oct 30 12:24 sess_qqq9r15pr6fouph14kqvcstgnc

Te paso una captura del msj que les muestra a los usuarios luego de cliquear en el link que reciben en su correo para activar la cuenta.

y la url sigue cambiando cuando intentan loguearse. Pasa de [b]http://138.117.79.62/preinscrip/imes311/[/b] a [b]http://138.117.79.62/preinscrip/imes311/acceso/login?ref=http://138.117.79.62/preinscrip/imes311/censo[/b]


WhatsApp Image 2020-10-30 at 09.45.17.jpg

WhatsApp Image 2020-10-30 at 09.45.17.png

Hola Javier,

El error “Este link no es válido. Puede que tu cuenta ya se encuentre activada o que lo hayas copiado mal del mail que te enviamos.” se puede llegar a dar porque copiaron mal la URL que les llega por email. Dicha URL contiene un query string con un TOKEN. Dicho TOKEN se busca con la siguiente query:


SELECT 
					id_preinscripcion, 
					usuario, 
					email_valido 
				FROM 
					sga_preinscripcion
				WHERE 
					codigo_validacion = <TOKEN>

Dicha query al no devolver datos da ese error. En los logs debería decir “TOKEN inexistente”.

saludos.
2

Hola Javier,

Con respecto al problema al intentar logearte, el punto clave donde hace el login es en la función autenticar de la clase vendor/siu/chulupi-framework/src/SIU/Chulupi/acceso/LoginManager.php, especialmente las variables $session y $auth.

Te pediría que agregues lo siguiente para que guarde mas datos en los logs:

  1. En la función __construct de la clase vendor/siu/chulupi-framework/src/SIU/Chulupi/nucleo/sesion.php agrega:

    function __construct()
    {
		klog2("session_name", $this->get_session_name());
		klog2("cookie_path", $this->get_cookie_path());
		klog2("cookie_domain", $this->get_cookie_domain());
		..............................
    }

  1. En la función get_auth_provider de la clase vendor/siu/chulupi-framework/src/SIU/Chulupi/acceso/LoginManager.php agrega:

	protected function get_auth_provider(sesion $session)
	{
		..............................
		klog2("auth_type", $auth_type);
		return $this->fuentes->instanciar_fuente($auth_type);
	}

Con eso podremos ver en los logs si hay diferencias en los nombres de la sesión de una petición a otra, etc.

saludos.
8

Hola Leonardo

No copió el link, lo cliqueo desde el email que le llegó, no cambió nada, se lo hice yo con el email de un compañero para probar. El problema se da porque cambia la url siempre que uno intenta loguearse, ya sea la primera vez entrando por el link de registro o luego con poniendo el email y contraseña. Eso era lo que quería mostrarles con la imagen.

Hola Leonardo

  1. Agregué esas 3 líneas en la función construct quedando así la función:

function __construct()
{
session_name($this->get_session_name());
$secure_cookie = (kernel::proyecto()->get_ssl_alcance() == ruteador::SSL_ALCANCE_ALL);
session_set_cookie_params(0, $this->get_cookie_path(), $this->get_cookie_domain(), $secure_cookie, true);
session_start();
klog2(“session_name”, $this->get_session_name());
klog2(“cookie_path”, $this->get_cookie_path());
klog2(“cookie_domain”, $this->get_cookie_domain());
}

  1. En la función get_auth_provider, agregue solo la primer linea porque la segunda ya estaba, quedando asi la funcion:

protected function get_auth_provider(sesion $session)
{
$auth_type = $session->get_con_default(‘__kernel_auth’, null);
if ($auth_type == null && isset($_GET[‘auth’])) {
$auth_type = $_GET[‘auth’];
}
klog2(“auth_type”, $auth_type);
return $this->fuentes->instanciar_fuente($auth_type);
}

Ahora hacemos algunos intentos de loguin y luego te paso los logs?

Hola Javier, perfecto!!!

Deberías validar que en todos los logs de las diferentes peticiones no cambie el “session_name”, por su configuración todos los logs deberían decir:


--  session_name  --------------------------------------------------------------

siu_sess_preinscrip/imes311_alumno

--  cookie_path  ---------------------------------------------------------------

/preinscrip/imes311

--  cookie_domain  -------------------------------------------------------------

138.117.79.62

También agrega lo siguiente a los logs, en la función instanciar_persona de la clase vendor/siu/chulupi-framework/src/SIU/Chulupi/acceso/LoginManager.php:


	protected function instanciar_persona(sesion $session, AuthenticationProvider $auth = null)
	{
		$autenticado = $session->abierta();
		klog2("=== autenticado ===", $autenticado); // <==> Agregá esto
		
		if($autenticado = $session->abierta()){
			$id_persona = $session->get_id_persona();
			$persona = $this->get_clase_persona($id_persona);
			kernel::set_persona($persona);
		}else {
			$persona = $this->get_clase_persona(null);
			kernel::set_persona($persona);
		}
		
		klog2("=== persona ===", print_r($persona, true));// <==> y esto
		
		if($auth != null){
			$auth->evt_persona_instanciada($persona, $autenticado);
		}

		return $persona;
	}

saludos.
2

Hola Javier,

Encontré un post que puede llegar a servir: https://stackoverflow.com/questions/17242346/php-session-lost-after-redirect

¿vos podes pasarnos un phpinfo() de tu servidor para poder comparar tu configuración con la nuestra?

También te pediría que en la función __construct de la clase vendor/siu/chulupi-framework/src/SIU/Chulupi/nucleo/sesion.php agregues estos klog2:


    function __construct()
    {
		session_name($this->get_session_name());
		$secure_cookie = (kernel::proyecto()->get_ssl_alcance() == ruteador::SSL_ALCANCE_ALL);
		session_set_cookie_params(0, $this->get_cookie_path(), $this->get_cookie_domain(), $secure_cookie, true);
        session_start();
		
		klog2("=== session_id ===", session_id());
		klog2("=== session_name ===", session_name());
		klog2("=== session_save_path ===", session_save_path());
		
    }

saludos.
2

Hola Leonardo

Ésta era mi función antes de agregarle las 2 líneas que me pediste:


protected function instanciar_persona(sesion $session, AuthenticationProvider $auth = null)
        {
                if($autenticado = $session->abierta()){
                        $id_persona = $session->get_id_persona();
                        $persona = $this->get_clase_persona($id_persona);
                        kernel::set_persona($persona);
                }else {
                        $persona = $this->get_clase_persona(null);
                        kernel::set_persona($persona);
                }
                if($auth != null){
                        $auth->evt_persona_instanciada($persona, $autenticado);
                }
                return $persona;
        }

Como te darás cuenta también le faltaba la primer línea: $autenticado = $session->abierta();
Yo se la agregué igualmente. Vos sacaste ese código de la versión 3.11.0 de Preinscripcion? De ser así porque a mi función le faltaría esa línea si tengo la versión 3.11 instalada?

Hola Javier,

No, yo lo tengo igual que vos, esas lineas te decía que las agregues para poder loggear mas información.

No te olvides de pasarme el “phpinfo” para poder observar si hay algo extraño.

saludos.
2