Как я могу проверить google reCAPTCHA v2 с помощью javascript/jQuery?

У меня простая форма контакта в aspx. Перед отправкой формы я хочу, чтобы проверить reCaptcha (клиентскую сторону). Пожалуйста, помогите.

Пример кода:

    <%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default2.aspx.vb" Inherits="Default2" %>
    <!DOCTYPE html>
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title>Test Form</title>
        <link rel="stylesheet" href="//code.jquery.com/ui/1.11.2/themes/smoothness/jquery-ui.css">
        <script src="//code.jquery.com/jquery-1.10.2.js"></script>
        <script src="//code.jquery.com/ui/1.11.2/jquery-ui.js"></script>
        <link rel="stylesheet" href="/resources/demos/style.css">
        <script src="https://www.google.com/recaptcha/api.js" async defer></script>
        <script>
            $("#cmdSubmit").click(function () {
                //need to validate the captcha
            });
        </script> 
    </head>
    <body>
        <form id="form1" runat="server">
            <label class="clsLabe">First Name<sup>*</sup></label><br />
            <input type="text" id="txtFName" name="txtFName" class="clsInput" /><br />
            <div class="g-recaptcha" data-sitekey="my_key"></div>
            <img id="cmdSubmit" src="SubmitBtn.png" alt="Submit Form" style="cursor:pointer;" />
        </form>
    </body>
    </html>

Я хочу проверить captcha на клике cmdSubmit.

Пожалуйста, помогите.

Ответ 1

Проверка на стороне клиента reCaptcha - для меня работало следующее:

"grecaptcha.getResponse();" возвращает null, если reCaptcha не проверяется на стороне клиента, else возвращает значение, отличное от нуля.

Код Javascript:

var response = grecaptcha.getResponse();

if(response.length == 0)
    //reCaptcha not verified

else
    //reCaptch verified

Ответ 2

Используйте это, чтобы проверить google captcha с помощью простого javascript.

Этот код в корпусе html:

<div class="g-recaptcha" id="rcaptcha" style="margin-left: 90px;" data-sitekey="my_key"></div>
<span id="captcha" style="margin-left:100px;color:red" />

Этот код помещается в головную часть кнопки вызова метода get_action (this):

function get_action(form) 
{
    var v = grecaptcha.getResponse();
    if(v.length == 0)
    {
        document.getElementById('captcha').innerHTML="You can't leave Captcha Code empty";
        return false;
    }
    else
    {
        document.getElementById('captcha').innerHTML="Captcha completed";
        return true; 
    }
}

Ответ 3

Если вы сделаете Recaptcha на обратном вызове

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

используя пустой DIV в качестве заполнителя

<div id='html_element'></div>

то вы можете указать необязательный вызов функции при успешном ответе CAPTCHA

var onloadCallback = function() {
    grecaptcha.render('html_element', {
      'sitekey' : 'your_site_key',
      'callback' : correctCaptcha
    });
  };

Затем возвращается ответ recaptcha в функцию "correctCaptcha".

var correctCaptcha = function(response) {
    alert(response);
};

Все это было из примечаний API Google:

Заметки API Google Recaptcha v2

Я немного не уверен, почему вы захотите это сделать. Обычно вы отправляете поле g-recaptcha-response вместе со своим приватным ключом для безопасной проверки серверной части. Если вы не хотите отключить кнопку отправки до тех пор, пока recaptcha не будет успешным или нет - в этом случае вышеуказанное должно работать.

Надеюсь, что это поможет.

Пол

Ответ 4

Упрощенный Пол отвечает:

Источник:

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

HTML:

<div class="g-recaptcha" data-sitekey="YOUR_KEY" data-callback="correctCaptcha"></div>

JS:

var correctCaptcha = function(response) {
        alert(response);
    };

Ответ 5

Я использовал решение HarveyEV, но неправильно прочитал его и сделал это с помощью проверки jQuery вместо валидатора Bootstrap.

  <script src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.14.0/jquery.validate.min.js"></script>
  <script>
    $("#contactForm").validate({
      submitHandler: function (form) {
        var response = grecaptcha.getResponse();
        //recaptcha failed validation
        if (response.length == 0) {
          $('#recaptcha-error').show();
          return false;
        }
          //recaptcha passed validation
        else {
          $('#recaptcha-error').hide();
          return true;
        }
      }
    });
  </script>

Ответ 6

вы можете сделать свою recaptcha, используя следующий код

<div id="recapchaWidget" class="g-recaptcha"></div>

<script type="text/javascript">
   var widId = "";
   var onloadCallback = function ()
   {
    widId = grecaptcha.render('recapchaWidget', {
    'sitekey':'Your Site Key'
            });
   };
 </script>

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

Затем вы можете проверить свою recaptcha с помощью метода IsRecapchaValid() следующим образом.

 <script type="text/javascript">
     function IsRecapchaValid()
      {
      var res = grecaptcha.getResponse(widId);
      if (res == "" || res == undefined || res.length == 0)
         {
          return false;
         }
       return true;
      }
 </script>

Ответ 7

Я использовал решение Palek в валидаторе Bootstrap, и он работает. Я бы добавил комментарий к нему, но у меня нет репутации;). Упрощенная версия:

        $('#form').validator().on('submit', function (e) {
           var response = grecaptcha.getResponse();
           //recaptcha failed validation
           if(response.length == 0) {
               e.preventDefault();
               $('#recaptcha-error').show();
           }
           //recaptcha passed validation
           else {
               $('#recaptcha-error').hide();
           }
           if (e.isDefaultPrevented()) {
              return false;
           } else {
              return true;
           }
       });

Ответ 8

Я думал, что все они великолепны, но у меня были проблемы с их работой с javascript и С#. Вот что я сделал. Надеюсь, это поможет кому-то другому.

//put this at the top of the page
<script src="https://www.google.com/recaptcha/api.js"></script>

//put this under the script tag
<script>
var isCaptchaValid = false;
function doCaptchaValidate(source, args) {
    args.IsValid = isCaptchaValid;
}
var verifyCallback = function (response) {
    isCaptchaValid = true;
};
</script>

//retrieved from google and added callback
<div class="g-recaptcha" data-sitekey="sitekey" data-callback="verifyCallback">

//created a custom validator and added error message and ClientValidationFucntion
<asp:CustomValidator runat="server" ID="CustomValidator1" ValidationGroup="Initial" ErrorMessage="Captcha Required" ClientValidationFunction="doCaptchaValidate"/>