Google reCAPTCHA

De BrapciWiki
Ir para navegação Ir para pesquisar

Link para criação

[https://www.google.com/recaptcha/admin/create]

Copie Site key e Secret key que o Google gera. Você usará:

  • Site key no front-end (formulário HTML).
  • Secret key no back-end (validação no servidor).

Carregue o script do reCAPTCHA

<script src="https://www.google.com/recaptcha/api.js" async defer></script>

No formulário

No Model

$recaptchaResponse = $this->request->getPost('g-recaptcha-response');

// Sua Secret Key (do passo 1)

       $secretKey = 'SUA_SECRET_KEY_AQUI';
       // Monta a URL para validar com o Google
       $url = 'https://www.google.com/recaptcha/api/siteverify';
       // Dados a serem enviados ao Google: secret, response e IP do usuário (opcional)
       $data = [
           'secret'   => $secretKey,
           'response' => $recaptchaResponse,
           'remoteip' => $this->request->getIPAddress(),
       ];
       // Fazer requisição POST para o reCAPTCHA
       $options = [
           'http' => [
               'method'  => 'POST',
               'header'  => 'Content-Type: application/x-www-form-urlencoded',
               'content' => http_build_query($data),
               'timeout' => 10,
           ],
       ];
       $context  = stream_context_create($options);
       $verify   = file_get_contents($url, false, $context);
       $captchaSuccess = json_decode($verify);
       // Verifica o resultado:
       if ($captchaSuccess->success) {
           // reCAPTCHA validado com sucesso → prossiga com o processamento dos dados (por ex. salvar no DB, enviar email etc.)
           // Exemplo simples:
           echo "CAPTCHA OK! Nome: " . esc($nome) . ", E-mail: " . esc($email);
           // Aqui você pode redirecionar para uma página de sucesso, gravar no banco, enviar e-mail, etc.
       } else {
           // Caso o reCAPTCHA falhe, exiba erro ou redirecione de volta ao formulário
           echo "Falha na validação do reCAPTCHA. Por favor, tente novamente.";
           // Ou use session/flashdata para exibir a mensagem em outra view:
           // return redirect()->back()->with('error', 'Por favor, confirme que você não é um robô.');
       }