我们刚刚将google recaptcha v2添加到我们的网站。它工作正常,但我们想要在表单提交reCaptcha。我们使用默认的不显眼的jquery验证。当用户没有填写reCaptcha小部件时,g-recaptcha-response
将为空。我已经看到其他线程询问如何使用javascript验证reCaptcha。我们绝对不想这样做,我们仍希望从服务器端验证它,但希望阻止垃圾邮件机器人尝试提交表单(因此需要它)。
看起来mvc只是为每个必填字段添加data-val="true"
和data-val-required="my error message"
,但我不确定如何挂钩reCaptcha。我还想确保以下代码仍然可以保持不变:
if ($(form).valid()) {
.....
}
答案 0 :(得分:1)
我只需要解决同样的问题,并提出以下方法。总之,添加一个隐藏字段,jquery不显眼的验证操作,并在recaptcha回调&amp ;;上填充/清除它。期满。
脚本:
function reCaptchaVerify(response) {
$('#hidden-recap').val(response);
}
function reCaptchaExpired () {
$('#hidden-recap').val('');
}
function reCaptchaCallback () {
grecaptcha.render('g-recaptcha', {
'sitekey': RC2KEY,
'callback': reCaptchaVerify,
'expired-callback': reCaptchaExpired
});
}
$.validator.setDefaults({ ignore: null });
在表单中,添加字段:
<div><input type="hidden" name="hidden-recap" id="hidden-recap" class="text form-control" value="" maxlength="500"
data-val="true" data-val-required="Please complete reCaptcha" />
<span class="field-validation-valid" data-valmsg-for="hidden-recap" data-valmsg-replace="true"></span></div>
注释
答案 1 :(得分:0)
我没有找到完美的解决方案,但我找到了一些现在可行的方法: http://www.ivanthevariable.com/combining-googles-recaptcha-and-jquery-validate/
html:
<input type="hidden" class="hiddenRecaptcha required" name="hiddenRecaptcha" id="hiddenRecaptcha">
<div class="g-recaptcha" data-sitekey="{YOUR-SITE-KEY-HERE}"></div>
<强>的javascript:强>
var validator = $("#add-conference").validate({
ignore: ".ignore",
rules: {
city: {
required: function() {
if ($("#city-name").val()) {
return false;
} else {
return true;
}
}
},
country: {
required: function() {
if ($("#country-name").val()) {
return false;
} else {
return true;
}
}
},
"hiddenRecaptcha": {
required: function() {
if(grecaptcha.getResponse() == '') {
return true;
} else {
return false;
}
}
}
}
});
我对这个解决方案不喜欢的是我必须关闭不引人注目的验证。希望有人提出一个解决方案,可以用于不引人注目的验证,直到那时我将使用这个解决方案。