Como resolver o erro POST_REGISTRATION_ERROR ao integrar o POK com o Moodle
O POST_REGISTRATION_ERROR aparece durante o registro dinâmico do POK LTI com o Moodle (3.10 ou superior) porque o servidor web que hospeda o Moodle não passa o header Authorization para o PHP, e o token de registro que o POK envia nunca chega ao Moodle. Resolva adicionando uma diretiva à configuração do Apache ou do Nginx e tente o Add LTI Advantage novamente.
Como o erro aparece
Ao colar a Tool URL dinâmica do POK no Moodle e clicar em Add LTI Advantage (em Site administration > Plugins > External tool > Manage tools, na página /mod/lti/toolconfigure.php), a tela de Manage tools mostra:
Integration process failed
Integration could not be completed at this time. Code (POST_REGISTRATION_ERROR)
O que está acontecendo de verdade
Durante o registro dinâmico, o POK envia ao Moodle um token de registro dentro do header HTTP Authorization. O POK sempre envia esse token (confirmado nos logs do POK), mas o erro interno que o Moodle retorna é missing_registration_token.
A causa mais comum: muitos servidores Moodle baseados em Apache não passam o header Authorization para o PHP por padrão. O POK envia o token corretamente, mas o Moodle nunca o vê chegar, e por isso informa que ele está faltando.
Em resumo: não é um problema do token nem do POK, e sim da configuração do servidor web que hospeda o Moodle, que descarta o header Authorization antes que o Moodle possa lê-lo.
Solução no Apache
Adicione a seguinte diretiva à configuração do Apache para que ele repasse o header Authorization ao PHP:
SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
Onde colocá-la, conforme a sua configuração:
- No VirtualHost do site Moodle, ou
- No arquivo
.htaccessna raiz da instalação do Moodle, ou - No arquivo de configuração global do Apache (por exemplo
apache2.conf/httpd.conf).
Depois de adicionar a diretiva:
-
Salve o arquivo de configuração.
-
Recarregue ou reinicie o Apache para aplicar a mudança:
sudo systemctl reload apache2O comando pode variar conforme o sistema:
apache2ouhttpd.
Se a diretiva SetEnvIf não funcionar no seu ambiente, tente esta alternativa no .htaccess:
RewriteEngine On
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule .* - [E=HTTP_AUTHORIZATION:%1]
Solução no Nginx
Se o seu Moodle roda em Nginx com PHP-FPM, adicione isto dentro do bloco location que processa o PHP:
fastcgi_param HTTP_AUTHORIZATION $http_authorization;
Depois recarregue o Nginx com sudo systemctl reload nginx.
Se você não administra o servidor diretamente (por exemplo, se o Moodle está em uma hospedagem gerenciada), compartilhe esta instrução com o seu provedor de hospedagem ou equipe de infraestrutura para que apliquem a mudança.
Como verificar se o header chega ao servidor
Antes ou depois de aplicar a mudança, você pode confirmar se o header Authorization está chegando:
-
Faça uma requisição HTTP para o seu Moodle incluindo um header
Authorization, por exemplo comcurl:curl -H "Authorization: Bearer prueba123" https://seu-dominio-moodle/ -
Verifique nos logs do servidor (ou com um script de teste em PHP que imprima
$_SERVER['HTTP_AUTHORIZATION']) se o header está sendo recebido.- Se não aparecer, o servidor está descartando o header: aplique a diretiva da seção anterior.
- Se aparecer, o header já está sendo repassado corretamente.
Tente a integração novamente
Assim que o servidor web repassar o header Authorization:
- Volte ao POK e copie novamente a URL dinâmica do LTI.
- No Moodle, vá para Site administration > Plugins > External tool > Manage tools.
- Cole a Tool URL copiada do POK.
- Clique em Add LTI Advantage para concluir o registro.
O registro deve ser concluído sem mostrar o POST_REGISTRATION_ERROR novamente.
Resumo rápido
| Item | Detalhe |
|---|---|
| Erro visível | Integration could not be completed. Code (POST_REGISTRATION_ERROR) |
| Erro interno do Moodle | missing_registration_token |
| Causa real | O servidor web não repassa o header Authorization ao PHP |
| Solução (Apache) | SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1 |
| Solução (Nginx) | fastcgi_param HTTP_AUTHORIZATION $http_authorization; |
| Ação final | Recarregar o servidor web e tentar o Add LTI Advantage novamente |
Se o erro persistir depois desses passos, fale conosco em contact@pok.tech informando o domínio do seu Moodle para que possamos revisar os logs de envio do token.