Acceso desde G3 Autogestión 3.18.0 --> Moodle 3.9.7

Tenemos el siguiente problema de configuración supongo,

Se creo, configuró, y testeo con éxito, la registración de la Plataforma virtual.
Se crearon cursos asociados a comisiones y se registratron las mismas, como asi los alumnos inscriptos en el curso de Moodle.

El hecho es que cuando el alumno ingresa por su AG al Curso, debe hacer el cambio de clave forzado en Moodle. Esto entiendo que es una directiva de Moodle cuando matricula a los alumnos.
El acceso a Moodle es directo y sabemos que debería ingresar ya logueado.

El problema es que no encontramos donde registrar, ni en Moodle ni en G3, que no pida forzosamente el cambio de clave en el siguiente acceso, al matricular.

Y llegado el caso, para salor de paso, si existe la opcion en Moodle de pedir masivamente el cambio de clave forzado, pero NO al reves.

Cualquier ayuda bienvenida,

garcias

Hola Jorge,

Cuando se crea el usuario en Moodle desde una persona de Guaraní se esta usando la función crearUsuarios de php/nucleo/moodle/moodle_nucleo.php. En la mismas se esta pasando el parámetro $usuario[‘createpassword’] = 1;, y no se esta pasando la contraseña de Guaraní ya que la misma esta encriptada en la base de datos y no hay forma de obtenerla plana, igualmente seria una mala practica copiar la contraseña de un sistema al otro si se pudiera.

Si vas a la siguiente operación de Moodle Área personal / Administración del sitio / Servidor / Servicios Web / Documentación de API y buscas el servicio core_user_create_users, vas a ver que tenes los siguientes parámetros relacionados a la contraseña:


createpassword int  Opcional //True if password should be created and mailed to user.
password string  Opcional //Plain text password consisting of any characters

El problema es que no encontramos donde registrar, ni en Moodle ni en G3, que no pida forzosamente el cambio de clave en el siguiente acceso, al matricular.

Voy a averiguar si modificando uno de esos dos parámetros no pide el cambio de clave forzado en Moodle.

saludos.
2

Hola Jorge,

Acabo de hacer una prueba y funciona de la siguiente manera:

Cuando createpassword = 1 el usuario de Moodle debe hacer el proceso de recuperar contraseña para generarla por primera vez.

Si createpassword = 0 te obliga que también se le pase el parámetro password. Aquí lo que se puede hacer es pasar una password y ya no va a pedir a los usuarios que generen una cuando los redirige desde Autogestión a Moodle. Pero hay que ser cuidadosos con este método ya que no es seguro, habría que recomendar a los usuarios que cambien la contraseña de inmediato.

Dicha password debe cumplir las siguientes condiciones:

La contraseña debería tener al menos 8 caracter(es), al menos 1 dígito(s), al menos 1 minúscula(s), al menos 1 mayúscula(s), al menos 1 caracter(es) no alfanuméricos como *,-, o #

saludos.
2

Hola Jorge, te paso la solución definitiva:

Personaliza la función crearUsuarios de php/nucleo/moodle/moodle_nucleo.php, vas a tener que agregar la preferencia Forzar cambio de contraseña como “deschequeada”, seria como sigue:


	public function crearUsuarios($usuarios, $excepciones = false)
	{

		array_walk($usuarios, function (&$usuario) {
			$usuario['createpassword'] = 1;
			$usuario['auth'] = static::AUTH_MANUAL;
			$usuario['lang'] = static::LANG_ES;
			$usuario['timezone'] = static::TIMEZONE_BSAS;
			$usuario['country'] = static::COUNTRY_AR;
			$usuario['preferences'] = [
				['type' => 'auth_forcepasswordchange', 'value' => '0']
			];
		});

		toba::logger()->debug("Usuarios a crear en Moodle:");
		toba::logger()->var_dump($usuarios);

		$usuariosMoodle = [];

		try {

			$response = $this->clienteGuzzle->post('', [
				'form_params' => [
					'wstoken' => $this->token,
					'moodlewsrestformat' => static::FORMATO_RESPUESTA_JSON,
					'wsfunction' => 'core_user_create_users',
					'users' => array_a_utf8($usuarios)
				]
			]);

			$responsePhp = rest_decode(guarani_rest::get_response_json($response));

			list($responseOk, $messageMoodle) = static::validarResponse($responsePhp);

			// Si la respuesta esta OK
			if ($responseOk) {

				$usuariosMoodle = $responsePhp;
				
			}
			
		} catch (Exception $e) {

			toba::logger()->error($e->getMessage());
			
		}
		
		if ($excepciones && !$responseOk) {
			throw new Exception($messageMoodle);
		}

		return $usuariosMoodle;
	}

Fíjate que se agrega lo siguiente:


			$usuario['preferences'] = [
				['type' => 'auth_forcepasswordchange', 'value' => '0']
			];

Luego para los usuarios ya creados va a tener que correr la siguiente query en la base de datos de Moodle:

UPDATE mdl_user_preferences SET value = '0' WHERE name = 'auth_forcepasswordchange';

“mdl_” es un prefijo de las tablas de Moodle, puedo ser distinto según como instalaste el mismo.

Dicha query marca la opción Forzar cambio de contraseña como “deschequeada” para todos los usuarios de Moodle, con lo cual ya no te va a forzar el cambio de contraseña.

Dicho cambio va a salir corregido en la versión 3.21.0 con el Ticket #42813.

saludos.
2

Gracias Leonel,

haremos el parche correspondiente.

Saludos