二次提交的reCAPTCHA提交无效

时间:2018-10-04 19:45:43

标签: php jquery ajax recaptcha

当用户提交表单时,将在php字段中进行验证。如果有错误,则php返回回显消息,表明存在错误(它不会将错误返回给ajax)。因此,ajax仍然是“成功”的。

如果我在ajax成功中评论grecaptcha.reset();,并且当用户第二次提交表单时,$response != null && $response->success将以php返回false

如何解决此问题,以便在ajax成功之后不存在grecaptcha.reset(),并且用户仅一次通过验证码就足够了。

以下是html格式的reCAPTCHA:

<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);
            },

    });
});

这是用于测试reCAPTCHA的php代码:

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 :(得分:0)

ArtisticPhoenix表示感谢。进一步调查后,相同的reCAPTCHA响应无法再次验证。更改php字段验证已解决了我的问题。