[转载]在ASP.NET MVC项目中使用极验验证(geetest) 点击按钮进行验证

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;
}

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值