jquery 无法获得google recaptcha v2以阻止表单提交

w7t8yxp5  于 2023-01-16  发布在  jQuery
关注(0)|答案(3)|浏览(147)

因此,我可以使用以下代码成功地获得验证码进行验证。

</p>
<?php
if(isset($_POST['g-recaptcha-response'])){
echo verify($_POST['g-recaptcha-response']);

}

function verify($response) {
$ip = $_SERVER['blank']; //server Ip
$key="secretkey"; // Secret key

//Build up the url
$url = 'https://www.google.com/recaptcha/api/siteverify';
$full_url = $url.'?secret='.$key.'&response='.$response.'&remoteip='.$ip;

//Get the response back decode the json
$data = json_decode(file_get_contents($full_url));
//Return true or false, based on users input
if(isset($data->success) && $data->success == true) {
return True;
}
return False;
}
?>
<p style="text-align: justify;">
<script type="text/javascript">
 function verify(){
 var serializedValues = jQuery("#infoForm").serialize();
 jQuery.ajax({ type: 'POST',url:"verify.php",data: serializedValues,success:function(result){
 if(result){
 $('#show').html('Your Form Successfully Submitted');
 $('.formwrap').hide(result);
 return true;
 }
 }});
 $('#show').html('Please Enter Valid Captcha');
 return false;
}
 var onloadCallback = function() {
 grecaptcha.render('captcha_ele', {
 'sitekey' : 'Enter Your Site Key Here', // Site key
 });
 };
 </script>

然而,当我点击提交,无论验证码说什么,表单仍然会提交。我的电子邮件表单过程如下...
一个二个一个一个

dsekswqp

dsekswqp1#

我使用这个方法,在表单提交中加入一个js函数来验证re-captcha:

<form action="/sign-visitors-log/" method="post" id="VisitorsLogForm" onsubmit="return validateRecaptcha();">

然后一些js停止表单提交,如果用户没有勾选复选框:

function validateRecaptcha() {
    var response = grecaptcha.getResponse();
    if (response.length === 0) {
        alert("not validated");
        return false;
    } else {
        alert("validated");
        return true;
    }
}

您可以将提醒替换为吐司或在页面上执行某些元素时。
高温加热

lkaoscv7

lkaoscv72#

在单独的js文件中(至少:没有对函数的内联调用),你必须检查验证码是否可以验证。

jquery('form').on('submit',function(e){

      if(grecaptcha.getResponse() === "") {
        e.preventDefault();
        alert('Error: \n please validate the Captcha test');
     }

  });

您不必检查测试passive是否为true,因为您已经阻止了使用此方法发送表单。

u3r8eeie

u3r8eeie3#

这是一个更简单的模型

document.querySelector(".form").addEventListener("submit", (event)=>{
    const response = grecaptcha.getResponse();
    if (response.length === 0) {
        event.preventDefault();
        alert("Please verify that you are human!");
    }
})
<!--reCAPTCHA v2 -->
<script src="https://www.google.com/recaptcha/api.js" async defer></script>
<form action="/" method="POST" class"form">
<!--Please register as a developer and add "your_site_key" you will find it on https://www.google.com/recaptcha/admin/create-->
<div class="g-recaptcha" data-sitekey="your_site_key"></div>
</form>

相关问题