Подтвердить что ты не робот

Как проверить Google reCaptcha в форме Submit

Недавно Google полностью переработал свой API reCaptcha и упростил его до одного флажка.

reCaptcha

Проблема заключается в том, что я могу отправить форму с включенной reCaptcha без ее проверки, и форма будет игнорировать reCaptcha.

Прежде чем отправлять форму в файл PHP с помощью частного ключа и др., я не вижу упоминания об этом в их Руководстве для разработчиков. Я не знаю, как проверить форму, чтобы убедиться, что новый reCaptcha был заполнен пользователем.

Я что-то упустил? Этот файл PHP с закрытым ключом все еще требуется?

Все, что у меня есть для reCaptcha:

<div data-type="image" class="g-recaptcha" data-sitekey="My Public Key"></div>
4b9b3361

Ответ 1

Если вы хотите проверить, был ли пользователь нажат на флажок I'm not a robot, вы можете использовать функцию .getResponse(), предоставляемую API-интерфейсом reCaptcha.

Он вернет пустую строку в случае, если Пользователь не подтвердил себя, что-то вроде этого:

if (grecaptcha.getResponse() == ""){
    alert("You can't proceed!");
} else {
    alert("Thank you");
}

В случае, если Пользователь проверил себя, ответ будет очень длинной.

Подробнее об API можно найти на этой странице: reCaptcha Javascript API

Ответ 2

var googleResponse = jQuery('#g-recaptcha-response').val();
if (!googleResponse) {
    $('<p style="color:red !important" class=error-captcha"><span class="glyphicon glyphicon-remove " ></span> Please fill up the captcha.</p>" ').insertAfter("#html_element");
    return false;
} else {            
    return true;
}

Поместите это в функцию. Вызовите эту функцию для отправки... #html_element - мой пустой div.

Ответ 3

Вы можете проверить ответ тремя способами в соответствии с документацией Google reCAPTCHA:

  • g-recaptcha-response: После того, как пользователь проверит флажок (я не робот), в вашем HTML будет заполнено поле с id g-recaptcha-response.
    Теперь вы можете использовать значение этого поля, чтобы узнать, является ли пользователь ботом или нет, используя приведенные ниже строки: -

    var captchResponse = $('#g-recaptcha-response').val();
    if(captchResponse.length == 0 )
        //user has not yet checked the 'I am not a robot' checkbox
    else 
        //user is a verified human and you are good to submit your form now
    
  • Прежде чем вы отправите свою форму, вы можете сделать звонок следующим образом: -

    var isCaptchaValidated = false;
    var response = grecaptcha.getResponse();
    if(response.length == 0) {
        isCaptchaValidated = false;
        toast('Please verify that you are a Human.');
    } else {
        isCaptchaValidated = true;
    }
    
    
    if (isCaptchaValidated ) {
        //you can now submit your form
    }
    
  • Вы можете отобразить reCAPTCHA следующим образом: -

    <div class="col s12 g-recaptcha" data-sitekey="YOUR_PRIVATE_KEY" data-callback='doSomething'></div>
    

    И затем определите функцию в вашем JavaScript, которая также может быть использована для отправки вашей формы.

    function doSomething() { alert(1); }
    

    Теперь, когда флажок (я не робот) отмечен, вы получите обратный вызов к определенному обратному сообщению, который doSomething в вашем случае.

Ответ 4

С точки зрения UX, это может помочь визуально информировать пользователя, когда они могут приступить к отправке формы - либо включив отключенную кнопку, либо просто сделав кнопку видимой.

Вот простой пример...

<form>
    <div class="g-recaptcha" data-sitekey="YOUR_PRIVATE_KEY" data-callback="recaptchaCallback"></div>
    <button type="submit" class="btn btn-default hidden" id="btnSubmit">Submit</button>
</form>

<script>
    function recaptchaCallback() {
        var btnSubmit = document.getElementById("btnSubmit");

        if ( btnSubmit.classList.contains("hidden") ) {
            btnSubmit.classList.remove("hidden");
            btnSubmitclassList.add("show");
        }
    }
</script>

Ответ 5

Попробуйте эту ссылку: https://github.com/google/ReCAPTCHA/tree/master/php

Ссылка на эту страницу размещена в самой нижней части этой страницы: https://developers.google.com/recaptcha/intro

Одна из проблем, с которой я столкнулся, не позволяла этим двум файлам работать правильно, - это мой файл php.ini для веб-сайта. Убедитесь, что это свойство настроено правильно, следующим образом: allow_url_fopen = Вкл

Ответ 6

Сначала вы можете убедиться, что флажок отмечен:

    var recaptchaRes = grecaptcha.getResponse();
    var message = "";

    if(recaptchaRes.length == 0) {
        // You can return the message to user
        message = "Please complete the reCAPTCHA challenge!";
        return false;
    } else {
       // Add reCAPTCHA response to the POST
       form.recaptchaRes = recaptchaRes;
    }

И затем на стороне сервера проверьте полученный ответ с помощью API reCAPTCHA Google:

    $receivedRecaptcha = $_POST['recaptchaRes'];
    $verifiedRecaptcha = file_get_contents('https://www.google.com/recaptcha/api/siteverify?secret='.$google_secret.'&response='.$receivedRecaptcha);

    $verResponseData = json_decode($verifiedRecaptcha);

    if(!$verResponseData->success)
    {
        return "reCAPTCHA is not valid; Please try again!";
    }

Для получения дополнительной информации вы можете посетить Документы Google.

Ответ 7

Убедитесь, что Google reCapcha действителен или нет после отправки формы

if ($post['g-recaptcha-response']) {
      $captcha = $post['g-recaptcha-response'];
      $secretKey = 'type here private key';
      $response = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=" . $secretKey . "&response=" . $captcha);
        $responseKeys = json_decode($response, true);
        if (intval($responseKeys["success"]) !== 1) {
            return "failed";
        } else {
            return "success";
        }
    }
    else {
        return "failed";
    }

Ответ 8

При использовании Google reCaptcha с файлом reCaptcha DLL мы можем проверить его в C#.

RecaptchaControl1.Validate();
bool Varify = RecaptchaControl1.IsValid;
if (Varify)
{
    // Pice of code after validation.
}

Его работа для меня.

Ответ 9

//validate
$receivedRecaptcha = $_POST['recaptchaRes'];
$google_secret =  "Yoursecretgooglepapikey";
$verifiedRecaptchaUrl = 'https://www.google.com/recaptcha/api/siteverify?secret='.$google_secret.'&response='.$receivedRecaptcha;
$handle = curl_init($verifiedRecaptchaUrl);
curl_setopt($handle,  CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($handle, CURLOPT_SSL_VERIFYPEER, false); // not safe but works
//curl_setopt($handle, CURLOPT_CAINFO, "./my_cert.pem"); // safe
$response = curl_exec($handle);
$httpCode = curl_getinfo($handle, CURLINFO_HTTP_CODE);
curl_close($handle);
if ($httpCode >= 200 && $httpCode < 300) {
  if (strlen($response) > 0) {
        $responseobj = json_decode($response);
        if(!$responseobj->success) {
            echo "reCAPTCHA is not valid. Please try again!";
            }
        else {
            echo "reCAPTCHA is valid.";
        }
    }
} else {
  echo "curl failed. http code is ".$httpCode;
}

Ответ 11

при использовании JavaScript это будет работать для меня

<script src='https://www.google.com/recaptcha/api.js'></script>
<script>
function submitUserForm() {
    var response = grecaptcha.getResponse();
    if(response.length == 0) {
        document.getElementById('g-recaptcha-error').innerHTML = '<span style="color:red;">This field is required.</span>';
        return false;
    }
    return true;
}
 
function verifyCaptcha() {
    document.getElementById('g-recaptcha-error').innerHTML = '';
}
</script>
<form method="post" onsubmit="return submitUserForm();">
    <div class="g-recaptcha" data-sitekey="YOUR_SITE_KEY" data-callback="verifyCaptcha"></div>
    <div id="g-recaptcha-error"></div>
    <input type="submit" name="submit" value="Submit" />
</form>

Ответ 12

var googleResponse = $('#g-recaptcha-response').val();

if(googleResponse=='')
{   
    $("#texterr").html("<span>Please check reCaptcha to continue.</span>");

    return false;
}