Saltar al contenido principal

Cómo solucionar el error POST_REGISTRATION_ERROR al integrar POK con Moodle

POST_REGISTRATION_ERROR aparece durante el registro dinámico de POK LTI con Moodle (3.10 o superior) porque el servidor web que aloja Moodle no pasa el header Authorization a PHP, y el token de registro que envía POK nunca llega a Moodle. Soluciónalo agregando una directiva a tu configuración de Apache o Nginx y reintenta Add LTI Advantage.

Cómo se ve el error

Al pegar la Tool URL dinámica de POK en Moodle y hacer clic en Add LTI Advantage (en Site administration > Plugins > External tool > Manage tools, en la página /mod/lti/toolconfigure.php), la pantalla de Manage tools muestra:

Integration process failed

Integration could not be completed at this time. Code (POST_REGISTRATION_ERROR)

Qué está pasando realmente

Durante el registro dinámico, POK envía a Moodle un token de registro dentro del header HTTP Authorization. POK siempre envía ese token (está confirmado en los logs de POK), pero el error interno que devuelve Moodle es missing_registration_token.

La causa más común: muchos servidores Moodle basados en Apache no pasan el header Authorization a PHP por defecto. POK envía el token correctamente, pero Moodle nunca lo ve llegar, y por eso reporta que falta.

En resumen: no es un problema del token ni de POK, sino de la configuración del servidor web que aloja Moodle, que descarta el header Authorization antes de que Moodle pueda leerlo.

Solución en Apache

Agrega la siguiente directiva a tu configuración de Apache para que reenvíe el header Authorization a PHP:

SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1

Dónde colocarla, según tu configuración:

  • En el VirtualHost del sitio Moodle, o
  • En el archivo .htaccess ubicado en la raíz de la instalación de Moodle, o
  • En el archivo de configuración global de Apache (por ejemplo apache2.conf / httpd.conf).

Después de agregar la directiva:

  1. Guarda el archivo de configuración.

  2. Recarga o reinicia Apache para aplicar los cambios:

    sudo systemctl reload apache2

    El comando puede variar según tu sistema: apache2 o httpd.

Si la directiva SetEnvIf no funciona en tu entorno, prueba esta alternativa en .htaccess:

RewriteEngine On
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule .* - [E=HTTP_AUTHORIZATION:%1]

Solución en Nginx

Si tu Moodle corre en Nginx con PHP-FPM, agrega esto dentro del bloque location que procesa PHP:

fastcgi_param HTTP_AUTHORIZATION $http_authorization;

Luego recarga Nginx con sudo systemctl reload nginx.

Hosting gestionado

Si no administras el servidor directamente (por ejemplo, si Moodle está en un hosting gestionado), comparte esta instrucción con tu proveedor de hosting o equipo de infraestructura para que apliquen el cambio.

Cómo verificar que el header llega al servidor

Antes o después de aplicar el cambio, puedes confirmar si el header Authorization está llegando:

  1. Realiza una petición HTTP hacia tu Moodle incluyendo un header Authorization, por ejemplo con curl:

    curl -H "Authorization: Bearer prueba123" https://tu-dominio-moodle/
  2. Verifica en los logs del servidor (o mediante un script de prueba en PHP que imprima $_SERVER['HTTP_AUTHORIZATION']) si el header está siendo recibido.

    • Si no aparece, el servidor lo está descartando: aplica la directiva de la sección anterior.
    • Si aparece, el header ya se está reenviando correctamente.

Reintenta la integración

Una vez que tu servidor web reenvíe el header Authorization:

  1. Vuelve a POK y copia nuevamente la URL dinámica de LTI.
  2. En Moodle, ve a Site administration > Plugins > External tool > Manage tools.
  3. Pega la Tool URL copiada desde POK.
  4. Haz clic en Add LTI Advantage para completar el registro.

El registro debería completarse sin volver a mostrar POST_REGISTRATION_ERROR.

Resumen rápido

ElementoDetalle
Error visibleIntegration could not be completed. Code (POST_REGISTRATION_ERROR)
Error interno de Moodlemissing_registration_token
Causa realEl servidor web no reenvía el header Authorization a PHP
Solución (Apache)SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
Solución (Nginx)fastcgi_param HTTP_AUTHORIZATION $http_authorization;
Acción finalRecargar el servidor web y reintentar Add LTI Advantage

Si el error persiste después de estos pasos, contáctanos en contact@pok.tech e indica el dominio de tu Moodle para que podamos revisar los logs de envío del token.