2015-12-07 89 views
2

我看了一下这个问题验证形式的与谷歌验证码提交

How to Validate Google reCaptcha on Form Submit

并试图实现这个问题的答案在我的代码来验证我的形式,所以它不会如果验证码尚未完成,请提交。

然而没有任何反应 - 它只是提交表单。

这是我的代码:

<head> 

     <script type="text/javascript"> 
    var onloadCallback = function() { 
    grecaptcha.render('html_element', { 
     'sitekey' : 'my_site_key' 
    }); 
    }; 
</script> 

</head> 

      <div id="html_element"></div> 
     <br> 

     <input type="submit" value="Submit" onclick="myFunction"> 

<script src="https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit" async defer> 
function myFunction() {  
if(grecaptcha.getResponse() == "") 
    alert("You can't proceed!"); 
else 
    alert("Thank you");} 
</script> 

谁能帮助?

编辑

<html> 
<head> 
     <script type="text/javascript"> 

var onloadCallback = function() { 
    grecaptcha.render('html_element', { 
    'sitekey' : '6LcWjRITAAAAAKCVz8G8WeG3duXwUqgGZSbJ_2lQ' 
    }); 
}; 
onloadCallback(); 

$('form').on('submit', function(e) { 
    if(grecaptcha.getResponse() == "") { 
    e.preventDefault(); 
    alert("You can't proceed!"); 
    } else { 
    alert("Thank you"); 
    } 
}); 
      </script> 
</head> 
<body> 
     <form action="?" method="POST"> 
     <div id="html_element"></div> 
     <br> 
     <input type="submit" value="Submit"> 
    </form> 


<script src="https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit" async defer> 

</script> 
    </body> 
+1

我不明白你的代码在所有。什么事件应该引发IF声明? –

+0

好吧,所以我忘了在函数中包装IF语句,检查我上面的编辑 –

+0

这也行不通。我已在下面发布了一个工作答案。 –

回答

3

您需要触发if声明的事件。如果你正在使用jQuery,你可以做到这一点很容易:

$('form').on('submit', function(e) { 
    if(grecaptcha.getResponse() == "") { 
    e.preventDefault(); 
    alert("You can't proceed!"); 
    } else { 
    alert("Thank you"); 
    } 
}); 

看到这里的工作例如:JSFiddle

与所有在JavaScript这样做的问题是,用户可以很容易伪造的结果,如果他们想要。如果您确实想要检查用户是否是机器人,那么您仍然应该使用reCAPTCHA密钥对服务器端用户提交的结果(通过POST)进行比较。

+0

这只是表单的一个附加部分,秘密密钥仍然会被使用。 但是,这仍然没有为我工作,我已经将您的JSFiddle代码添加到一个新的文档,无法摸清它。你会看看我上面添加我的新代码的最新编辑。 –

+0

谢谢。它与谷歌验证码2版本。投票。 –

0

这里是服务器端的解决方案,除了谷歌提供的嵌入代码之外,不需要jQuery/javascript。

当用户在您的网站上提交包含reCaptcha的表单时,请在服务器端查找“g-recaptcha-response”POST参数。

然后把你自己的HTTP POST请求此网址:https://www.google.com/recaptcha/api/siteverify

您发送作为该请求的一部分POST参数为:

秘密 - 必需。您的网站与reCAPTCHA之间的共享密钥。

响应 - 必需。由reCAPTCHA提供的用户响应令牌,验证您网站上的用户。

remoteip - 可选。用户的IP地址。

然后你应该从Google那里得到这样的东西,你可以检查成功。

{ “成功”:真|假, “challenge_ts”:时间戳,//挑战负荷的时间戳(ISO格式YYYY-MM-dd'T'HH:MM:ssZZ) “主机名”: string,//解决reCAPTCHA的站点的主机名 “error-codes”:[...] //可选 }

如果success = true,则显示成功消息或重定向到成功页面。

如果success = false,则再次显示表单,并显示一条消息,指出他们是机器人并请再试一次。

这里看到更多的信息:

https://developers.google.com/recaptcha/docs/verifyhttp://dotnettec.com/google-recaptcha-example-javascript/

+0

找到这份工作[示例] [1] [1]:http://dotnettec.com/google-recaptcha-example-javascript/ – Julia