私は自分のウェブサイトの登録フォームで jQuery 検証を使用しており、下部に reCaptcha があります。フォームのエラーをチェックするスクリプトは次のとおりです (関連する部分のみに編集されています)。
$(document).ready(function() {
jQuery.validator.addMethod("checkCaptcha", function() {
var phpquery = $.ajax({url:"verify.php",
type: "POST",
async: false,
data:{recaptcha_challenge_field:Recaptcha.get_challenge(),recaptcha_response_field:Recaptcha.get_response()},
success:function(resp) {
if (resp == 'false') {
console.dir(resp);
return false;
} else {
console.dir(resp);
return true;
}
}
});
},"");
$('#regForm').validate({
rules:{
recaptcha_response_field:{required:true,checkCaptcha:true}
},
messages:{
recaptcha_response_field:{checkCaptcha:"Your Captcha response was incorrect. Please try again."}
}
});
});
正しい reCaptcha 応答を入力し、送信をクリックするか、応答テキスト フィールドからタブで移動すると、最初はtrue
コンソールに表示され、すぐにスローfalse
され、フォームの送信が妨げられます。
また、間違った reCaptcha 応答が入力された場合、想定どおりにスローさfalse
れますが、入力したすべての文字に対して、それを送信してverify.php
に返しfalse
ます。最終的に正しい reCaptcha の入力を完了すると、それが認識されず、false
.
reCaptcha をリロードするfalse
と、正しい応答が入力された場合でも がスローされます。
verify.php
なぜなら、すべて<form>
がaction="verify.php,"
完全に機能するからです (つまり、何回試行しても、正しい reCaptcha を入力したかどうかがわかります) 。
何か不足していますか?これを行うためのより簡単で信頼できる方法はありますか?