Skip to content

CakePHP Recaptcha v3

Recaptcha en CakePHP

HTML CakePHP

<style type="text/css">
.grecaptcha-badge { visibility: hidden; }
html { overflow: hidden !important; }
</style>
<form action="" id="login-form" class="smart-form client-form" method="post">
<header>
<?= __('Sign In') ?>
</header>
<fieldset>
<section>
<label class="label"><?= __('User') ?></label>
<label class="input"> <i class="icon-append fa fa-user"></i>
<input type="username" name="username">
<b class="tooltip tooltip-top-right"><i class="fa fa-user txt-color-teal"></i> <?= __('Please enter username') ?></b></label>
</section>
<input type="hidden" name="google_captcha_v3" value="" id="google_captcha_v3" />
<section>
<label class="label"><?= __('Password') ?></label>
<label class="input"> <i class="icon-append fa fa-lock"></i>
<input type="password" name="password">
<b class="tooltip tooltip-top-right"><i class="fa fa-lock txt-color-teal"></i><?= __('Enter your password') ?> </b> </label>
<div class="note">
<a href="/recoverys/recovery"><?= __('Forgot password?') ?></a>
</div>
</section>
<section>
<label class="checkbox">
<input type="checkbox" name="remember" checked="">
<i></i><?= __('Stay signed in') ?></label>
</section>
</fieldset>
</form>
<div class="g-recaptcha" data-sitekey="<?= $this->Webtext->getText('google_captcha_v3_key_client'); ?>"></div>
<script src="https://www.google.com/recaptcha/api.js?onload=ReCaptchaCallbackV3&render=<?= $this->Webtext->getText('google_captcha_v3_key_client'); ?>"></script>
<script>
ReCaptchaCallbackV3 = function() {
grecaptcha.ready(function() {
grecaptcha.execute("<?= $this->Webtext->getText('google_captcha_v3_key_client'); ?>").then(function(token) {
$('#google_captcha_v3').val(token);
$('#login-form').attr('action', '/users/login');
$('#login-form').append('<footer id="footer"><button type="submit" class="btn btn-primary" onclick="convert();"><?= __('Sign in') ?></button></footer>');
});
});
};
function convert() {
var srch=document.getElementById("username");
str = srch.value;
srch.value=str.toLowerCase();
}
</script>

PHP CakePHP

public function recaptchav3($token = null) {
$score = null;
$this->loadModel('WebTexts');
$recaptcha_url = 'https://www.google.com/recaptcha/api/siteverify';
$recaptcha_secret = $this->WebTexts->find('all')->where(['WebTexts.name' => 'google_captcha_v3_key_server'])->first()->webtext;
$recaptcha = json_decode(file_get_contents($recaptcha_url . '?secret=' . $recaptcha_secret . '&response=' . $token));
if($recaptcha->success == 'true'){
return $recaptcha->score;
} else {
return $this->redirect($this->Auth->redirectUrl());
}
}
//call it...
if($this->recaptchav3($this->request->getData('google_captcha_v3')) > 0.7 ){}

Este documento proporciona una integración de Recaptcha en una aplicación CakePHP. La sección HTML CakePHP incluye un formulario de inicio de sesión con campos de usuario y contraseña, así como un área para el Recaptcha. El script JavaScript maneja la ejecución de Recaptcha y la manipulación del formulario. En la sección PHP CakePHP, se proporciona una función para verificar el token Recaptcha y se muestra cómo llamarla en el código.