https://www.cnblogs.com/dare/p/6823738.html
geetest开发体验,写一下快速搭建geetst的步骤(极简模式)
首先,我们去geetest注册一个账号 ,拿到验证所需的captcha_id和private_key(不想注册的同学可以使用下面提供测试id和key)
captcha_id:b46d1900d0a894591916ea94ea91bd2c
private_key:36fc3fe98530eea08dfc6ce76e3d24c4
我们一般在做项目时为了保证提交的数据是真实用户数据而非机器人提交一般都会添加验证码操作来让用户在提交表单的同时填上服务端生成的验证码,这样在一定程度上能够防止暴力提交或者暴力破解。但是却在一定程度上增加了开发的成本。
现在的互联网上各种产品都能够独立开发使用,今天小猪就为大家介绍 极验验证 这个工具。
目前网络中已经可以发现大量使用该产品的应用,用户只需简单的滑动滑块来进行验证( 体验地址 ),一定程度上提高了用户体验。
极验官方提供了C#版本的服务端 SDK 。并且提供了一个简单的 DEMO 。可惜该DEMO是Web Form版本的。而目前大家使用的比较多的是ASP.NET MVC项目,所以今天小猪就在其官方DEMO的基础上改成了ASP.NET MVC项目。
<div id="geetest-container"> </div> <script src="http://static.geetest.com/static/tools/gt.js"></script> <script> window.addEventListener('load',processGeeTest); function processGeeTest() { $.ajax({ // 获取id,challenge,success(是否启用failback) url: "/Account/GeekTest", type: "get", dataType: "json", // 使用jsonp格式 success: function (data) { // 使用initGeetest接口 // 参数1:配置参数,与创建Geetest实例时接受的参数一致 // 参数2:回调,回调的第一个参数验证码对象,之后可以使用它做appendTo之类的事件 initGeetest({ gt: data.gt, challenge: data.challenge, product: "float", // 产品形式 offline: !data.success }, handler); } }); } var handler = function (captchaObj) { // 将验证码加到id为captcha的元素里 captchaObj.appendTo("#geetest-container"); captchaObj.onSuccess = function(e) { console.log(e); } }; </script>
public ActionResult GeekTest() { string result = getCaptcha(); return Content(result, "application/json"); } private String getCaptcha() { GeetestLib geetest = new GeetestLib(geetest_publicKey, geetest_privateKey); Byte gtServerStatus = geetest.preProcess(); Session[GeetestLib.gtServerStatusSessionKey] = gtServerStatus; return geetest.getResponseStr(); }
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl) { if (!CheckGeeTestResult()) { ModelState.AddModelError("", "请先完成验证操作。"); return View(model); } if (!ModelState.IsValid) { return View(model); } //其他验证逻辑 ... } } private bool CheckGeeTestResult() { GeetestLib geetest = new GeetestLib(geetest_publicKey, geetest_privateKey); Byte gt_server_status_code = (Byte)Session[GeetestLib.gtServerStatusSessionKey]; String userID = (String)Session["userID"]; int result = 0; String challenge = Request.Form.Get(GeetestLib.fnGeetestChallenge); String validate = Request.Form.Get(GeetestLib.fnGeetestValidate); String seccode = Request.Form.Get(GeetestLib.fnGeetestSeccode); if (gt_server_status_code == 1) result = geetest.enhencedValidateRequest(challenge, validate, seccode, userID); else result = geetest.failbackValidateRequest(challenge, validate, seccode); if (result != 1) return false; return true; }