谷歌隐形 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浏览器作为最大化的浏览器

html 谷歌reCAPTCHA ASP.NET C#,ASP.NET Web API

谷歌 reCaptcha 与 Laravel