谷歌隐形 reCaptcha 仅在隐身模式下工作
Posted
技术标签:
【中文标题】谷歌隐形 reCaptcha 仅在隐身模式下工作【英文标题】:Google invisible reCaptcha is only working in Incognito mode 【发布时间】:2021-08-07 10:51:05 【问题描述】:我在我网站的联系表单上设置了 Google reCAPTCHA。
我也在尝试在本地主机和服务器上测试它,但 recaptcha 只能在隐身模式下工作。
没有捕获 reCAPTCHA 邮件正在发送。 我的问题是 grecaptcha.execute();没有执行,请为此提出解决方案。
$("#cont_msg").keypress(function (e)
var key = e.which;
if (key == 13)
// the enter key code
$("#contact_form_submit").click();
return false;
);
$(
".app_form_wrapper .apps_input input, .app_form_wrapper .apps_input textarea"
).keypress(function ()
$(this).parent().removeClass("error");
);
function sendMail()
var co_name = $("#cont_name").val();
var co_email = $("#cont_email").val();
var co_phone = $("#cont_phone").val();
var co_company = $("#cont_company").val();
var co_message = $("#cont_msg").val();
let data =
username: co_name,
useremail: co_email,
userphone: co_phone,
usercompany: co_company,
usermessage: co_message,
;
$("#loading").show();
$("#contact_form_submit").hide();
$.ajax(
type: "POST",
url: "contact_ajaxmail.php",
data: data,
success: function (contact)
//grecaptcha.execute();
$("#loading").hide();
$("#contact_form_submit").show();
var i = contact.split("#");
if (i[0] == "1")
$("#cont_name").val("");
$("#cont_email").val("");
$("#cont_phone").val("");
$("#cont_company").val("");
$("#cont_msg").val("");
$("#contact_err").html(i[1]);
$(".app_form_wrapper .apps_input").addClass("success");
setTimeout(function ()
$(".app_form_wrapper .apps_input").removeClass("success");
$(".app_form_wrapper .apps_input").removeClass("error");
$("#cont_email").parent().removeClass("error");
, 2500);
else
$("#cont_name").val(data.username);
$("#cont_email").val(data.useremail);
$("#cont_phone").val(data.userphone);
$("#cont_company").val(data.usercompany);
$("#cont_msg").val(data.usermessage);
$("#contact_err").html(i[1]);
$(
".app_form_wrapper .apps_input input, .app_form_wrapper .apps_input textarea"
).each(function ()
if (!$(this).val())
$(this).parent().addClass("error");
else
if (i[0] == 3)
$("#cont_email").parent().addClass("error");
else
$(this).parent().addClass("error");
$(this).parent().removeClass("error");
);
,
);
**My form**
Here iam trying to send mails for entered email
<!DOCTYPE html>
<html lang="en">
<!-- BEGIN HEAD -->
<head>
<script src="https://www.google.com/recaptcha/api.js" async defer></script>
</head>
<form class="app_form_wrapper" role="form" >
<div class="col-lg-6 text-left">
<div class="form-group apps-pulldown-20">
<div class="apps_input">
<input type="text" class="form-control" id="cont_name"placeholder="Name">
</div>
</div>
<div class="form-group apps-pulldown-20">
<div class="apps_input">
<input type="text" class="form-control" id="cont_email" placeholder="Email">
</div>
</div>
<div class="form-group apps-pulldown-20">
<div class="apps_input">
<input type="tel" class="form-control" id="cont_phone" placeholder="Phone Number" minlength="10" maxlength="15">
</div>
</div>
</div>
<div class="col-lg-6">
<div class="form-group apps-pulldown-20">
<div class="apps_input">
<input type="text" class="form-control" id="cont_company" placeholder="Company">
</div>
</div>
<div class="form-group apps-pulldown-20">
<div class="apps_input">
<textarea rows="10" class="form-control" id="cont_msg" placeholder="Message"></textarea>
</div>
</div>
</div>
<div class="col-lg-12">
<div class="g-recaptcha"
data-sitekey="Site_key"
data-callback="sendMail"
data-size="invisible">
</div>
<p>
This site is protected by reCAPTCHA and the Google
<a href="https://policies.google.com/privacy">Privacy Policy</a> and
<a href="https://policies.google.com/terms">Terms of Service</a> apply.
</p>
<a class="btn btn-default btn-lg contact_btn" id="contact_form_submit">Send</a>
<a class="btn btn-default btn-lg contact_btn" id="loading" style="display: none;">Sending...</a>
<p class="input_error"id="contact_err" style="color:#FF6666;position:absolute;font-size:14px;font-weight: 500;letter-spacing: 0.5px;bottom: 10px;left: 0;right: 0;">
</p>
</div>
</form>
<script type="text/javascript">
$(document).ready(function ()
$("#contact_form_submit").on("click", function ()
var co_name = $("#cont_name").val();
var co_email = $("#cont_email").val();
var co_phone = $("#cont_phone").val();
var co_company = $("#cont_company").val();
var co_message = $("#cont_msg").val();
if (
co_name != "" &&
co_email != "" &&
co_phone != "" &&
co_company != "" &&
co_message != ""
)
grecaptcha.execute();
else
$("#loading").hide();
$("#contact_form_submit").show();
$("#contact_err").html("Please fill all the fields !!!!");
);
)
</script>
</body>
</html>
【问题讨论】:
你确定你的脚本不只是缓存在你的non incognito模式吗?你有没有尝试console.log
来查看你的脚本是否正在更新?
您是否在contact_ajaxmail.php
中提供任何服务器端验证?类似于gist.github.com/adhershmnair/43bba7c1c58bce86e0a1fda77be47129
嗨@Rippo我没有在contact_ajaxmail.php文件中添加服务器端验证,我尝试了类似的方式,你发送仍然得到同样的东西,你能帮我在哪里做服务器端验证。 bitbucket.org/harshithss98/demo/src/master
您是否安装了可能阻止 javascript 的广告拦截器?默认情况下,扩展程序在隐身模式下被禁用。
【参考方案1】:
验证码需要两件事才能使其正常工作
Javascript 中的客户端代码,你已经正确地完成了。
服务器端代码,如果不实现服务器端代码,验证码无用,因为机器人只会直接发布到您的 PHP 表单,而无需输入验证码!根据您的 cmets,这是您缺少的部分。
见
https://developers.google.com/recaptcha/intro
注意它说您需要执行 2 个步骤,1 个客户端,2 个验证响应:
https://developers.google.com/recaptcha/docs/verify
Google 返回加载结果,但这似乎是一篇最新文章
https://phppot.com/php/php-contact-form-with-google-recaptcha/
Google implementing google captcha php
【讨论】:
以上是关于谷歌隐形 reCaptcha 仅在隐身模式下工作的主要内容,如果未能解决你的问题,请参考以下文章
Chrome的Linux键盘在隐身模式下打开新窗口的快捷键是啥
如何将 Firebase 隐形 reCAPTCHA 用于 Angular Web 应用程序?
在打开 chrome 开发者工具的情况下,React 应用程序变慢了。在隐身模式下工作正常
Selenium WebDriver - Chrome - C# - 无法在隐身模式下启动selenium浏览器作为最大化的浏览器