最近在给公司的网页把传统的输入字符数字的验证码改google reCAPTCHA验证,就写写我学到的和一些我的理解!说得不好请勿怪!有兴趣可以的去
https://developers.google.com/recaptcha/docs/display官网看看。

一、是recaptcha密钥的申请https://developers.google.com/recaptcha。需要登录google账号哦!

申请到密钥后,就是使用了。这https://developers.google.com/recaptcha/docs/display有介绍的。不过我还是再回顾一下。

二、 div+class 的简单使用与recaptcha前端验证

<script type="text/javascript" src="https://www.google.com/recaptcha/api.js" async defer></script>
<script>
var recaptchaBox = doucument.getElementById("recaptchaBox");
//验证成功回调事件,用data-callback绑定
var verifyCallback = function (response) {
recaptchaBox.style.border = "";
document.getElementById("resStr").innerText = response; //输出一下,看看这验证通过后,返回的验证码
}
  function btnClick() {
var res = grecaptcha.getResponse();
if (!res) {
alert("请完成recaptcha验证!");
recaptchaBox.style.border = "1px solid red";
return;
}
}
</script>
<div id="recaptchaBox"><div class="g-recaptcha" data-sitekey="your_site_key" data-callback="verifyCallback"></div></div>
<span id="resStr"></span>
<button type="button" id="btn" onclick="" runat="server">button-btn</button>

google提供的grecaptcha.getResponse()方法的返回值,在验证通过时,与回调事件中response相同。验证不通过则返回值为空,该方法可用于在前台判断recaptcha验证是否通过。

二、onload事件与主题(风格)

<script type="text/javascript">
  var onloadCallback = function () {
    grecaptcha.render('recaptchaId', {
      'sitekey': '网站密钥',
      'callback': '验证通过,回调事件',
      'theme': '目前主题是dark或light,默认为light'
    });
  };
</script>
<script type="text/javascript" src="https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit" async defer></script> <div id="recaptchaBox2"><div id="recaptchaId"></div></div>

onload事件是提供id来加载recaptcha小窗口的,https://www.google.com/recaptcha/api.js 加载完成开始执行onload事件,onload是异步执行的。

在div+clas+'data-size'里,是加载完成api.js,异步查找到div+clas+'data-size',然后调用相关事件。

三、api.js的可选参数render=onload/explicit

根据google reCAPTCHA官网对render参数的介绍,翻译后:“可选的。 是否显式呈现窗口小部件。 默认为onload,这将在它找到的第一个g-recaptcha标记中呈现小部件。”

从这里可以看出,render至少在表面上时可选的,实际上却是不是如此的,看“默认为onload”就知道了,你在引用https://www.google.com/recaptcha/api.js时没有写,不代表render它就没用到,因为它的值默认为onload。就像recaptcha的主题一样,它只是在你看不到的地方调用了。

另外也要注意一下,explicit为显式呈现窗口小部件,那么onload就是非显式呈现喽。去看看英文翻译:onload负载,explicit明确的

一起来看看下面的几个区别:注意参数render的值和是否使用onload事件

<h3>The First One</h3>
<script src="https://www.google.com/recaptcha/api.js" async="async"></script>
<div class="g-recaptcha" data-sitekey="your_sitekey"></div>
<h3>The First Two</h3>
<script src="https://www.google.com/recaptcha/api.js?render=onload" async="async"></script>
<div class="g-recaptcha" data-sitekey="your_sitekey"></div>
<h3>The First Three</h3>
<script src="https://www.google.com/recaptcha/api.js?render=explicit" async="async"></script>
<div class="g-recaptcha" data-sitekey="your_sitekey"></div>

The First One 和 The First Two 没什么区别,都能正常呈现,而The First Three。

在这里我还要提醒下哦,不能几个render参数值不同的在同一个页面一起运行,不然不能看出来是否呈现哦!
因为这样得到的结果是都正常呈现,只是呈现的有着时间上的差异。下面也一样的啦!下面的onload事件,我就省略啦。

<h3>The Second One</h3>
<script src="https://www.google.com/recaptcha/api.js?onload=onloadCallback" async="async"></script>
<div id="grecaptcha1"></div>
<h3>The Second Two</h3>
<script src="https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=onload" async="async"></script>
<div id="grecaptcha2"></div>
<h3>The Second Three</h3>
<script src="https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit" async="async"></script>
<div id="grecaptcha3"></div>

这一次的只有The Second Three能正常呈现,说明了有onload事件时,需满足render=explicit;而没有onload事件时,满足render=onload。

在grecaptcha.render("",{})方法中,'site-key'被配置成了,必要参数呢!
具体的是为啥,我这菜鸟不知道,我没有特别去破解过那些封包,要是哪位大神知道,麻烦给我留个言,菜鸟我在这先谢过啦。

四、直接后台验证

<script type="text/javascript">
var onloadCallback = function () {
  grecaptcha.render('recaptcha', {
  'sitekey': 'your_site_key',
      'callback': function () { document.getElementById("recaptchaBox").style.border = ""; }
    });
  };
  function proxyButton() {
    var res = grecaptcha.getResponse();
    if (!res) {
      alert("请完成ReCaptcha验证!");
      document.getElementById("recaptchaBox").style.border = "1px solid red";
      return;
    }
    $("#hidd_response").val(res);
     __doPostBack('button', '');
  }
</script>
<script src="https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit" async defer></script>
<div id="grecaptchaBox" style="width: 302px; height: 76px; padding: 1px;">
  <div id="grecaptcha" style="width: 304px; height: 78px;"></div>
</div>
<input type="button" id="button" value="button" runat="server" onclick="return proxyButton();" onserverclick="btnClickServer" />
<asp:HiddenField ID="hidd_response" runat="server" Value="" />
 #region 获取返回的字符串

    [WebMethod]
protected string VerifyCaptcha(string response)
{
string res = string.Empty;
string secret = "6LcoyGoUAAAAANIlt2aFc7khDwUfBG-cabvUBihS"; Dictionary<string, string> parameters = new Dictionary<string, string>(); parameters.Add("secret", secret);
parameters.Add("response", response); string url = "https://www.google.com/recaptcha/api/siteverify?secret=" + secret + "&response=" + response;
return (new WebClient()).DownloadString(url);
}
#endregion #region 转换为json
protected bool verifyPast()
{
string resStr = VerifyCaptcha(this.hidd_response.Value); Newtonsoft.Json.Linq.JObject jObject = Newtonsoft.Json.Linq.JObject.Parse(resStr);
if (jObject["success"].ToString().ToLower() == "true")
return true;
else
return false;
}
#endregion

在这里,我并没有将 “var res = grecaptcha.getResponse()”作为json/jsonp类型数据传值给后台,而是直接使用一个隐藏控件来存储它的值,在后台,就可以直接获取到这个值。

还有一点要注意,获取到的每一个“var res = grecaptcha.getResponse()”能且只能返回一次“success:true”,后面再用这个res去获取验证码返回的都是“success:false”

嗯,这里来点番外,据说这个https://www.google.com/recaptcha/api/siteverify验证使用什么T3技术啥的,所以这个.NET Framework2.0版本是不能访问该网站的;3.0的我不知道,没试过,4.0的是可以滴。

要是想看 “var res = grecaptcha.getResponse()”作为json/jsonp类型数据传值给后台,可以去看看这2个:http://www.pdwzjs.com/news/731.htmlhttps://katyusha.net/archives/391.html

(⊙o⊙)…,差点忘了一个,语言设置,只要在引入api.js是在后面加上‘hl=xx’就行了,别忘了将 xx 替换掉哦,语言库:https://developers.google.com/recaptcha/docs/language 。

<script src="https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit&hl=en" async defer></script>

google recaptcha-v2的更多相关文章

  1. ASP.NET Core 使用 Google 验证码(Google reCAPTCHA)

    关心最多的问题,不FQ能不能用,答案是能.Google官方提供额外的域名来提供服务,国内可以正常使用. 一. 前言 验证码在我们实际的生活场景中非常常见,可以防止恶意破解密码.刷票.论坛灌水.刷注册等 ...

  2. Google reCAPTCHA 2 : Protect your site from spam and abuse & Google reCAPTCHA 2官方教程

    1

  3. (6)Xamarin.android google map v2

    原文 Xamarin.android google map v2 Google Map v1已经在2013年的3月开始停止支持了,目前若要在你的Android手机上使用到Google Map,就必须要 ...

  4. Android Google Map v2具体解释:开发环境配置

    Android Google Map v2具体解释:开发环境配置                                       --转载请注明出处:coder-pig 说在前面: 说到地 ...

  5. [Xamarin.Android] 如何使用Google Map V2 (转帖)

    Google Map v1已經在2013年的3月開始停止支援了,目前若要在你的Android手機上使用到Google Map,就必須要使用 到Google Map v2的版本.在Xamarin要使用G ...

  6. Google recaptcha在webform中的使用

    开源项目 https://github.com/tanveery/recaptcha-net   这个的NuGet下载量最高 https://github.com/PaulMiami/reCAPTCH ...

  7. Google reCAPTCHA 人机身份验证

    1. 适合范围 注册及登录某些使用Google验证码的网站,如https://zaif.jp/,会要求进行人机身份验证 2. 方法介绍 下载老D的Google hosts以及一键更新批处理程序 老D博 ...

  8. 在国内使用Google验证码reCaptcha

    如今各大网站都不可缺少的一部分就是验证码,验证码具有防止恶意批量操作,保护账户安全等作用.但是现在各种暴力破解验证码的手段层出不穷,验证码的保护也就失去了意义.所以各大平台为了应对这种情况也是使用类似 ...

  9. ASP.NET Core 使用 Google 验证码(reCAPTCHA v3)代替传统验证码

    写在前面 友情提示: Google reCAPTCHA(v3下同) 的使用不需要"梯子",但申请账号的时候需要! Google reCAPTCHA 的使用不需要"梯子&q ...

  10. 人机验证reCAPTCHA v3使用完备说明

    v2简介 相信大家都碰到过下面的展示的 人机验证界面: reCaptcha 是 Google 公司的验证码服务,方便快捷,改变了传统验证码需要输入n位失真字符的特点. reCaptcha 在使用的时候 ...

随机推荐

  1. 反编译.net下的exe程序

    1. 什么叫.net平台 .NET框架是一个多语言组件开发和执行环境,它提供了一个跨语言的统一编程环境..NET框架的目的是便于开发人员更容易地建立Web应用程序和Web服务,使得Internet上的 ...

  2. fiddler导出请求返回的响应数据

    或者右键 选择response导出

  3. Ionic3学习笔记(八)使iOS端、Android端 Navbar 透明化

    本文为原创文章,转载请标明出处 若要使iOS端 Navbar 透明,只需要给 ion-navbar 添加 transparent 属性,但是Android端依旧会有一条border在,所以再给 ion ...

  4. 语言发展与python

    编程语言的发展史(机械语言.汇编语言.高级语言) 机械语言:直接使用二进制与计算机沟通,直接操作硬件,执行效率高,开发效率低. 汇编语言:用简单的英文代替二进制,直接操作硬件,执行效率较机械语言低,开 ...

  5. 混乱中的ICO平台,会不会是下一个P2P的重灾区?

    当众多巨头和创业者还在为共享打车.共享单车.VR.IP化.互联网金融沉迷时,一种全新的"众筹"正在造就一个又一个暴富神话.其名为ICO,即首次代币众筹,一般指区块链初创项目在众筹平 ...

  6. ES6学习总结(五)

    与其说是对象合并,还不如说是JavaScript中对象属性的复制和转移,将多个对象中的属性合并到一个对象中 12345678 var person = { name : 'John', age : 2 ...

  7. grpc调试工具

    grpcurl 和 grpcui 都是调试grpc的利器,前者用于命令行,类似curl工具:后者是以web的形式进行调试的,类似postman工具. 有了这两款工具,我们不用写任何客户端代码,也能方便 ...

  8. 初学qt——数据库连接

    连接数据库我们需要有相应的dll文件,不同的数据库用不同的文件,对应的dll这里就不提供了,网上一搜一堆,就只说下这些文件的存放位置吧. 找到对应的dll文件后打开自己安装的qt的文件目录,将dll文 ...

  9. VM安装Linux Centos7.0虚拟机

    一.准备工作 1.安装VMware 官网https://www.vmware.com/cn.html 2.准备centos7的镜像文件 官网下载链接:http://isoredirect.centos ...

  10. web资源预加载-生产环境实践

    此文记录资源预加载在我们项目的实践,技术难度不算高,重在介绍一套技术方案的诞生与实施,其中都进行了哪些思考,依据什么来做决策,如何进行效果评估,等等.为读者在制定技术方案时提供一定启示. 背景 资源预 ...