Origem: Relato de falha no login de novo.[REDACTED].com com reCAPTCHA v3/v2 ativo, gerando bloqueio falso-positivo ("robô") sem exibição do checkbox reCAPTCHA v2.
Lote Vinculado: BATCH-177.
Status: ready-for-intake.
1. Diagnóstico e Causa-Raiz
Ao ativar a proteção de reCAPTCHA no ambiente de produção/staging (novo.[REDACTED].com) e tentar efetuar login com credenciais válidas, o sistema bloqueia o acesso emitindo o alerta:
"A sua requisição não foi aceita pois nosso sistema automático de segurança considerou a mesma sendo feita por um robô. Favor tentar novamente, mas caso o problema persista, favor entrar em contato clicando aqui."
Causa-Raiz 1: reCAPTCHA v3 Nunca Executa em Telas Tailwind (perfil-usuario.js)
Em gestor/modulos/perfil-usuario/perfil-usuario.js:
var temFormFomantic = (typeof $ !== 'undefined' && typeof $.fn !== 'undefined' && typeof $.fn.form === 'function');
...
// A validação e o gancho do reCAPTCHA abaixo são do Fomantic. Em Tailwind, `interface-tailwind.js`
// valida pelas mesmas `gestor.interface.regrasValidacao` e intercepta o `submit` nativo.
if(temFormFomantic)
$(formSelector2).form({ ... grecaptcha.execute(...) ... });Nas telas migradas para Tailwind CSS (layout-administrativo-tailwind ou layouts públicos Tailwind), o Fomantic UI não é carregado (temFormFomantic é false). O comentário supôs que interface-tailwind.js executaria o reCAPTCHA, porém interface-tailwind.js não possui nenhuma linha de código para reCAPTCHA ou captcha.
Como resultado:
-
O formulário Tailwind é submetido nativamente sem os campos
tokeneaction. -
O backend (
perfil-usuario.php) recebe$_POST['token']vazio. -
A validação
gestor_captcha_validar()falha imediatamente. -
O backend assume que a requisição veio de um robô e dispara
alert-recaptcha-invalid.
Causa-Raiz 2: Inexistência de Fallback para reCAPTCHA v2 no Módulo perfil-usuario
Enquanto o módulo de formulários dinâmicos (formulario.php) possui o degrau intermediário de exigir o reCAPTCHA v2 (status => 'require_v2') quando o v3 falha ou retorna score < 0.5, o módulo de login/autenticação (perfil-usuario.php):
-
Nunca implementou o fallback para o checkbox v2.
-
Rejeita o usuário sumariamente via
interface_alerta(['redirect' => true, 'msg' => $alerta])mesmo queUSUARIO_RECAPTCHA_V2_ACTIVEesteja ligado com chaves válidas no.env. -
O usuário fica preso sem qualquer meio interativo de provar que é humano.
2. Escopo
2.1 Interceptação de Captcha Agnóstica ao Framework no Frontend
-
Em
gestor/modulos/perfil-usuario/perfil-usuario.js:-
Desacoplar a execução de captcha do plugin
$.fn.formdo Fomantic. -
Adicionar ouvinte de submissão para formulários Tailwind (
#_gestor-form-logar,#_gestor-form-autenticar,#_gestor-form-signup,#_gestor-form-forgot-password). -
Quando
googleRecaptchaActiveouturnstileSiteKeyestiver presente emgestor:-
Interceptar o primeiro clique de envio.
-
Executar o reCAPTCHA v3 (
grecaptcha.execute()) ou obter o token do Turnstile. -
Injetar os campos ocultos
tokeneaction(oucf-turnstile-response). -
Prosseguir com a submissão nativa do formulário (sem disparar laço infinito de submit).
-
-
2.2 Implementação do Fallback para reCAPTCHA v2 em Telas de Autenticação
-
No Backend (
perfil-usuario.php):-
Se
CAPTCHA_PROVIDER === 'google-recaptcha'e o v3 falhar (ou score < 0.5), verificar se$_CONFIG['usuario-recaptcha-v2-active']está ativo. -
Se o v2 estiver ativo e ainda não tiver sido submetido
g-recaptcha-response:-
Não disparar o alerta imediato de robô.
-
Retornar o formulário em estado de exigência de v2 (ex.: sinalizar para a view renderizar o contêiner do reCAPTCHA v2).
-
-
Se
g-recaptcha-responsetiver sido enviado, validar contrausuario-recaptcha-v2-serverviagestor_captcha_validar(null, ['v2' => true]). -
Se a validação do v2 passar, permitir que o fluxo de autenticação/login prossiga normalmente.
-
-
No Frontend:
-
Renderizar o widget do reCAPTCHA v2 (checkbox) na tela quando solicitado pelo backend.
-
2.3 Paridade com o Cloudflare Turnstile
-
Assegurar que os formulários de login sob Tailwind suportem o Turnstile sem necessidade do plugin do Fomantic.
3. Critérios de Aceitação
-
Login Funcional em Tailwind com reCAPTCHA v3: Em páginas de login sob framework Tailwind com reCAPTCHA v3 ativo, o formulário envia o
tokene autentica o usuário com credenciais corretas sem acusar robô. -
Fallback para reCAPTCHA v2: Em caso de suspeita ou score baixo no v3, o formulário exibe o checkbox do reCAPTCHA v2 em vez de barrar o usuário diretamente.
-
Validação do reCAPTCHA v2: Ao marcar o checkbox v2 e reenviar, o backend valida o token v2 e conclui o login com sucesso.
-
Sem Dependência de Fomantic: O ciclo completo de captura de token funciona em Tailwind puro sem chamar
$.fn.form. -
Suíte sem Regressões: Todos os testes unitários do PHPUnit e Vitest passam com exit 0.