Problemas con pers en 3w version 3.10

Hola, estamos tratando de adaptar nuestras personalizaciones de la version 3.9 a la 3.10, y nos estan saliendo diferentes errores al momento de loguearnos. Nosotros habiamos personalizado la pantalla principal para que funcione con logueo multiple, y en la version previa del codigo se llamaba a la funcion siu\operaciones\acceso\controlador::login(), la cual ya no existe en 3.10, de manera que necesitariamos que nos ayuden a corregir este problema para que nuestra personalizacion vuelva a funcionar.

Saludos!

Hola, esto en que parte del código ocurre, osea en que clase y/o método se estaba llamando esa función?

Otra pregunta, su nodo de colab es este https://colab.siu.edu.ar/trac/guarani3/browser/nodos/uba-fcen/3w, no?. Solo para poder ver el código y resolver el problema mas rápido.

saludos.

Hola, a partir de la versión 3.10 se pueden llevar a cabo varios tipos de logueo (logueo tradicional a través de un formulario web, logueo por SAML, etc.) esto se configura en el archivo instalacion/login.php.

Si lo que queres utilizar es logueo tradicional a través de un formulario web, crea el archivo instalacion/login.php con el siguiente contenido:


<?php

return array(

    'form'   => array(
        'activo'     => true,
        'clase'      => 'modelo\\autenticacion\\auth_form',
        'parametros' => array(

        )
    ),

);

Otro cambio en la versión 3.10 es que el logueo no se lleva a cabo en siu\operaciones\acceso\controlador::login(), sino que eso depende del tipo de logueo, en el caso anterior el logueo se lleva a cabo en src/siu/modelo/autenticacion/auth_form.php método autenticar(). Osea que la personalización la vas a tener que hacer sobre este ultimo método.

cualquier consulta no dudes en preguntar. saludos.

Hola, no sabemos bien como adaptar nuestra personalizacion de login al nuevo codigo base de autenticacion.
Por ejemplo, el codigo anterior de la funcion accion__index llamaba a this->login(usuario, password), cuando en el nuevo se llama a this->vista()->set_pagelet(‘login’).

Saludos!

Hola, ahora en vez de llamarse a

$this->login($usuario, $password);

en src/siu/operaciones/acceso/controlador.php función accion__index(), se esta llamando a src/siu/modelo/autenticacion/auth_form.php función autenticar(), esta para iniciar sesión llama a

$this->validar_user_pass($usuario, $pass);

. Esta función adentro hace:

$id_persona = $this->get_clase_usuarios()->autenticar_usuario_clave($usuario, $password);

lo cual se encuentra en src/siu/modelo/autenticacion/fuente_usuarios_guarani.php función autenticar_usuario_clave($id, $clave).

vayan viendo ese código a ver como pueden readaptar la personalización, cualquier duda me consultan.

saludos!

Una aclaración mas conceptual. Ahora el controlador de la operación acceso no tiene mas logica de login, la desacoplamos!

La operación de acceso (controlador) en principio no necesitan modificarla.

El controlador solamente recorre y le da control a los distintos mecanismos de login (autentication_provider) que tengan habilitados en instalacion/login.php como dijo Leo.

Ustedes se podrían agregar su propio provider con algo asi:

    
        'fcen'   => array(
        'activo'     => true,
        'clase'      => 'modelo\\autenticacion\\auth_fcen', //tienen que crear esta clase con su logica!
        'parametros' => array(
               //opcional, cosas que quieran cambiar por configuracion
        )
    ),

Luego, esta clase auth_fcen la pueden extender de auth_form o de auth_con_sesion (miren de referencia auth_form).

El flujo de login va a llamar primero a su get_modelo() y lo que retornen ahi se los deja en el twig acceso/login/default.twig como ‘this.data.providers.fcen’ para que puedan configurar la vista. (esta si la tienen que personalizar)

Finalmente, la url a donde tienen que mandar los datos del form va a ser asi, y van a poder procesarlo en el metodo ‘autenticar’ de la misma clase.**

kernel::vinculador()->crear('acceso', 'index', array('auth' => 'fcen')); 
o genericamente 
kernel::vinculador()->crear('acceso', 'index', array('auth' => $this->get_id())),

** Si la autenticación no es correcta, pueden guardar los errores, y en el mismo pedido se va a volver a llamar get_modelo() para que puedan mostrar los mensajes de error. Se entiende el flujo?

Adicional. El helper de los providers: $this->get_clase_usuarios()->autenticar_… instancia la clase personalizable “modelo\autenticacion\fuente_usuarios_guarani”. Pueden agregar ahi un metodo autenticar_fcen para hacer las consultas y validaciones sobre el usuario logueado.
Saludos!