Introducción
La autenticación se realiza mediante la ejecución de la función /lib/moodlelib.php → authenticate_user_login() que realiza el siguiente proceso:
- Obtener lista de authentication plugins habilitados.
- Consultar username en tabla mdl_user, obtener authetication plugin asociado
- Crear user object con información de mdl_user (si existe), o vacío (si no existe)
- Ejecutar procedimiento del authentication plugin:
- Ejecutar user_login(), retorna valor booleano (true – autenticado / false – no autenticado). Si es false continua con el siguiente authentication plugin
1) Definir archivos y configuración inicial
Descripción de Archivos
moodle/auth/nombreplugin/auth.php //clase principal del plugin moodle/auth/nombreplugin/lang/en/auth_nombreplugin.php //configuracion en ingles moodle/auth/nombreplugin/lang/es/auth_nombreplugin.php //configuracion en español
moodle/auth/nombreplugin/auth.php
require_once($CFG->libdir.'/authlib.php'); class auth_plugin_nombreplugin extends auth_plugin_base { function __construct() { $this->authtype = 'nombreplugin'; //Es necesario completar este atributo para que el plugin detecte el archivo de lenguaje } }
moodle/auth/nombreplugin/lang/es/auth_nombreplugin.php
$string['pluginname'] = 'Mi Plugin'; $string['auth_nombreplugindescription'] = 'Autenticacion de Mi Plugin';
2) Crear método de autenticación del plugin
user_login()
user_login debe retornar true si el usuario está habilitado o false en caso contrario.
class auth_plugin_nombreplugin extends auth_plugin_base { ... //***** @override ***** function user_login($username, $password) { //TODO REALIZAR AUTENTICACION DESEADA return true } }
authenticate_user_login()
Una vez autenticado el usuario (user_login() retorno true): Si el usuario ya existía en mdl_user, se actualizan sus datos de autenticación, si no existía en mdl_user, se crea el usuario completando sus datos de autenticación. Los datos de autenticación son:
auth //Plugin de autenticación utilizado username //Nombre de usuario utilizado para autenticación password //Password utilizado. Se carga con el valor not cached, si user_update_password no está definida correctamente.
Tener cuidado con el plugin utilizado, si posteriormente se desactiva, entonces no permitirá loguear el usuario nuevamente.
A continuación se describe el código ejecutado por authenticate_user_login luego de que user_login retornara true.
if ($user->id) { //LINEA 4481 // User already exists in database. if (empty($user->auth)) { // For some reason auth isn't set yet. $DB->set_field('user', 'auth', $auth, array('id' => $user->id)); $user->auth = $auth; } // If the existing hash is using an out-of-date algorithm (or the legacy md5 algorithm), then we should update to // the current hash algorithm while we have access to the user's password. update_internal_user_password($user, $password); //SI EXISTE SE ACTUALIZA PASSWORD EN mdl_user if ($authplugin->is_synchronised_with_external()) { // Update user record from external DB. $user = update_user_record_by_id($user->id); //SI ESTA CONFIGURADO SE ACTUALIZAN LOS DATOS DE LA BASE DEL MOODLE CON LOS EXTRAIDOS DE LA BASE EXTERNA } } else { // Create account, we verified above that user creation is allowed. $user = create_user_record($username, $password, $auth); //SI NO EXISTE SE CREA UNA FILA EN mdl_user solo con $username, $password y plugin de autenticación utilizado }
Detalles
Consulta de usuarios de la base de datos del moodle
SELECT * FROM mdl_user WHERE username LIKE '%username%' #buscar usuario de prueba para login DELETE FROM mdl_user WHERE id = 99999 #id encontrado en la consulta anterior
Configuración
Archivo de configuración del moodle: config.php //ver acceso a la base de datos