Procedimiento para Crear Plugin de Autenticación Moodle

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:

  1. Obtener lista de authentication plugins habilitados.
  2. Consultar username en tabla mdl_user, obtener authetication plugin asociado
  3. Crear user object con información de mdl_user (si existe), o vacío (si no existe)
  4. Ejecutar procedimiento del authentication plugin:
    1. 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

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *