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
.htaccessubicado 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:
-
Guarda el archivo de configuración.
-
Recarga o reinicia Apache para aplicar los cambios:
sudo systemctl reload apache2El comando puede variar según tu sistema:
apache2ohttpd.
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.
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:
-
Realiza una petición HTTP hacia tu Moodle incluyendo un header
Authorization, por ejemplo concurl:curl -H "Authorization: Bearer prueba123" https://tu-dominio-moodle/ -
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:
- Vuelve a POK y copia nuevamente la URL dinámica de LTI.
- En Moodle, ve a Site administration > Plugins > External tool > Manage tools.
- Pega la Tool URL copiada desde POK.
- 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
| Elemento | Detalle |
|---|---|
| Error visible | Integration could not be completed. Code (POST_REGISTRATION_ERROR) |
| Error interno de Moodle | missing_registration_token |
| Causa real | El 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 final | Recargar 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.