reCAPTCHA во второй форме отправить не работает - PullRequest
0 голосов
/ 04 октября 2018

Когда пользователи отправляют форму, в php проверяются поля.Если есть какая-то ошибка, php возвращает эхо-сообщение о том, что произошла ошибка (она не возвращает ERROR в ajax).Так что Аякс по-прежнему "успех".

Если я прокомментирую grecaptcha.reset(); в успехе ajax и когда пользователь отправит форму во второй раз, то $response != null && $response->success вернет false в php.

Как это исправить, чтобы не было grecaptcha.reset() после успешной работы ajax и чтобы пользователю было достаточно пропустить капчу только один раз.

Вот reCAPTCHA вHTML-форма:

<div class="g-recaptcha" style="display:inline-block;" data-sitekey="6LdDlHIUAAAAAD3hgpRSSsNpS7SaRILGNTNiyak_"></div>

Вот jQuery:

jQuery('#some_form').submit(function(e){
    e.preventDefault();
    var FormData = jQuery(this).serialize();
    jQuery('.buttonHolder').css('display', 'none');
    jQuery('#spinner-1').css('display', 'block');


jQuery.ajax({   

        url : rml_obj.ajax_url,
        type : 'post',
        dataType : 'json',
        data : {
            action : 'some_form',
            security : rml_obj.check_nonce,
            data1 : FormData
        },
        success : function( response ) {
            PUM.open(7939);
            //alert(checkbox_chk);
            jQuery('.pum-content').html(response.message1);
            jQuery('.copy-url').html(response.message2);
            jQuery('.buttonHolder').css('display', 'block');
            jQuery('#spinner-1').css('display', 'none');
            //grecaptcha.reset();
        },
        error: function(xhr, ajaxOptions, thrownError){
                alert(xhr.status);
            },

    });
});

А вот код php для тестирования reCAPTCHA:

require_once "recaptchalib.php";
$secret = "6LdDlHIUAAAAALFlTOx-9T63cODtjs7eno******";
$response = null; 
$reCaptcha = new ReCaptcha($secret);

$data = $_POST[ 'data1' ];
parse_str($data, $output);
$var1 = $output['var1'];
$var2= $output['var2'];

if ($output["g-recaptcha-response"]) {
    $response = $reCaptcha->verifyResponse(
    $_SERVER["REMOTE_ADDR"],
    $output["g-recaptcha-response"]
    );
}

if ($response != null && $response->success) {
//insert data into db ...
    header("Content-type: application/json; charset=utf-8");
    echo json_encode(
            array("message1" => 'message1',
                  "message2" => 'message2')
    )
} else {
    header("Content-type: application/json; charset=utf-8");
    echo json_encode(
            array("message1" => 'error reCAPTCHA')
}

1 Ответ

0 голосов
/ 05 октября 2018

Такс ArtisticPhoenix за добрый совет.После дальнейшего исследования один и тот же ответ reCAPTCHA не может быть проверен дважды.Изменения в проверке полей php устранили мою проблему.

...