javascript - ReCAPTCHA 验证

标签 javascript validation recaptcha

这里我有一个简单的jsp表单。我希望 reCAPTCHA 和文本框都是“必填”字段。目前,如果我只是填写文本框并按“登录”,它仍然会发送数据。如何使 reCAPTCHA 成为必需(即强制)?

<!DOCTYPE html>
<html lang="en">
<head>

<script src='https://www.google.com/recaptcha/api.js'></script>

</head>

<body>

<label> Form </label>

<form action = "somefile" method = "post">

  <input = "text" name = "textbox1" required>

  <div class="g-recaptcha" data-sitekey="6LdliBkTAAAAALmMlPRRm0NtKW3fz2kT2nxiWrVG"></div>

  <button type="submit" name="login">Sign In</button>

</form>

</body>
</html>

最佳答案

您绝对可以使用一些 JavaScript 来使 reCaptcha 成为必需的。当然,您仍然需要验证 reCaptcha 服务器端,但这将添加一些客户端验证。

  • 您需要一些 JavaScript 变量来跟踪您的 reCaptcha 是否已被解决:

    var captcha_passed = false;
    
  • 告诉 Google 的 reCaptcha 在成功完成后调用您的函数:

    <div class="g-recaptcha" data-callback="on_captcha_filled" data-sitekey="6LdliBkTAAAAALmMlPRRm0NtKW3fz2kT2nxiWrVG"></div>
    
  • 添加标签,让您的用户知道这一点被错过了。将其隐藏。如果他们在没有 reCaptcha 的情况下提交,JavaScript 将取消隐藏它。

    <label id="lblCaptchaRequired" style="color: red" hidden>Please complete the reCaptcha</label>
    
  • 添加由 reCaptcha 调用的 javascript 函数:

    function on_captcha_filled() {
        captcha_passed = true;
        document.getElementById("lblCaptchaRequired").hidden = true;
    }
    
  • 在表单中添加一个 onsubmit 处理程序,以在继续之前验证 reCaptcha 是否已通过:

    <form action = "somefile" method = "post" onsubmit = "check_captcha(event)">
    
  • 添加 onsubmit 处理程序 javascript:

    function check_captcha(e) {
        if (captcha_passed)
            return true;
        document.getElementById("lblCaptchaRequired").hidden = false;
        e.preventDefault();
    }
    
  • 更新后的表单:

    <form action = "somefile" method = "post" onsubmit = "check_captcha(event)">
    
        <input = "text" name = "textbox1" required>
    
        <div class="g-recaptcha" data-callback="on_captcha_filled" data-sitekey="6LdliBkTAAAAALmMlPRRm0NtKW3fz2kT2nxiWrVG"></div>
        <label id="lblCaptchaRequired" style="color: red" hidden>Please complete the reCaptcha</label>
    
        <button type="submit" name="login">Sign In</button>
    
    </form>
    
  • Javascript 文件

    var captcha_passed = false;
    
    /*
    *   Form onsubmit handler.
    *   Display captcha required label and prevent submit until captcha_passed is true
    */
    function check_captcha(e) {
        if (captcha_passed)
            return true;
        document.getElementById("lblCaptchaRequired").hidden = false;
        e.preventDefault();
    }
    
    /*
    *   Google reCaptcha data-callback handler.
    *   Sets captcha_passed to true to allow form submission and hides captcha required label.
    */
    function on_captcha_filled() {
        captcha_passed = true;
        document.getElementById("lblCaptchaRequired").hidden = true;
    }
    

现在,当您的用户到达该页面时,所需的标签最初会隐藏,并且您的 captcha_passed 会初始化为 false。当用户提交表单时,将调用 onsubmit 处理程序 check_captcha,该处理程序检查 captcha_passed 标志,并允许提交操作继续或停止它并取消隐藏标签。
当用户完成 reCaptcha 时,您的 on_captcha_filled 函数将被调用,该函数将 captcha_passed 标志设置为 true 并隐藏标签。

关于javascript - ReCAPTCHA 验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36123980/

相关文章:

javascript - Ajax 和 Google reCaptcha

javascript - 选择模板时出现 Expo 错误 : Could not get npm url for package

javascript - 将 .js 文件包含在 alfresco 中的另一个 javascript 文件中

php - Woocommerce 产品自定义字段 : Check if the input already exist

css - 单击 noCAPTCHA 复选框后页面宽度增加(使用 bootstrap-rtl)

django表单向导和recaptcha

javascript - ReactJS为什么会出现这种状态变化不渲染的情况?我究竟做错了什么?

javascript - Fabric js多选移动不会触发单个对象的移动事件

silverlight - 在 Silverlight 4 中强制验证 ria 实体

MySQL,如何使用 PHP 验证字符串日期?