极验证的运用(nodejs部署)

在页面中加入一些验证码,避免外部恶意破坏。下面描述的是本人在工作过程中用nodejs对极验证部署的总结。
这里写图片描述

1、用nodejs部署极验证思路:
安装依赖:request、express、body-parser、supervisor、express-session。
利用 npm install gt3-sdk –save 安装SDK,然后引入:var Geetest = require('gt3-sdk');
部署第一个接口:

var click = require('./static/click');
app.get("/gt/register-click", function (req, res) {

    // 向极验申请每次验证所需的challenge
    click.register(null, function (err, data) {
        if (err) {
            console.error(err);
            res.status(500);
            res.send(err);
            return;
        }

        if (!data.success) {
            // 进入 failback,如果一直进入此模式,请检查服务器到极验服务器是否可访问
            apirefer

            // 为以防万一,你可以选择以下两种方式之一:

            // 1. 继续使用极验提供的failback备用方案
            req.session.fallback = true;
            res.send(data);

            // 2. 使用自己提供的备用方案
            // todo
        } else {
            // 正常模式
            req.session.fallback = false;
            res.send(data);
        }
    });
});

部署第二个接口:

app.post("/gt/validate-click", function (req, res) {
    // 对ajax提供的验证凭证进行二次验证
    click.validate(req.session.fallback, {
        geetest_challenge: req.body.geetest_challenge,
        geetest_validate: req.body.geetest_validate,
        geetest_seccode: req.body.geetest_seccode
    }, function (err, success) {
        if (err) {
            // 网络错误
            res.send({
                status: "error",
                info: err
            });

        } else if (!success) {
            // 二次验证失败
            res.send({
                status: "fail",
                info: '登录失败'
            });
        } else {
            res.send({
                status: "success",
                info: '登录成功'
            });
        }
    });
});

2、web页面使用极验:
引入初始化的js文件:<script src="gt.js"></script>
调用初始化函数进行初始化:

$.ajax({
        url: "gt/register-click?t=" + (new Date()).getTime(), // 加随机数防止缓存
        type: "get",
        dataType: "json",
        success: function (data) {
            // 调用 initGeetest 进行初始化
            // 参数1:配置参数
            // 参数2:回调,回调的第一个参数验证码对象,之后可以使用它调用相应的接口
            initGeetest({
                // 以下 4 个配置参数为必须,不能缺少
                gt: data.gt,
                challenge: data.challenge,
                offline: !data.success, // 表示用户后台检测极验服务器是否宕机
                new_captcha: data.new_captcha, // 用于宕机时表示是新验证码的宕机

                product: "popup", // 产品形式,包括:float,popup
                width: "300px"
                // 更多前端配置参数说明请参见:http://docs.geetest.com/install/client/web-front/
            }, handler);
        }
    });

初始化完成之后,进行具体的流程操作。

var handler = function (captchaObj) {
        captchaObj.appendTo('#captcha');
        captchaObj.onReady(function () {
            $("#wait").hide();
        });
        $('#btn').click(function () {
            var result = captchaObj.getValidate();
            if (!result) {
                return alert('请完成验证');
            }
            $.ajax({
                url: 'gt/validate-click',
                type: 'POST',
                dataType: 'json',
                data: {
                    username: $('#username2').val(),
                    password: $('#password2').val(),
                    geetest_challenge: result.geetest_challenge,
                    geetest_validate: result.geetest_validate,
                    geetest_seccode: result.geetest_seccode
                },
                success: function (data) {
                    if (data.status === 'success') {
                        alert('登录成功');
                    } else if (data.status === 'fail') {
                        alert('登录失败,请完成验证');
                        captchaObj.reset();
                    }
                }
            });
        })
        // 更多前端接口说明请参见:http://docs.geetest.com/install/client/web-front/
    };

也可以换成绑定按钮的登录方式,需要把初始化函数中的参数product换成:bind。
后续的操作代码做如下修改:

var handler = function (captchaObj) {
        captchaObj.appendTo('#captcha');
        captchaObj.onReady(function () {
            $("#wait").hide();
        });
        captchaObj.onSuccess(function(){
            var result = captchaObj.getValidate();
            if (!result) {
                return alert('请完成验证');
            }
            $.ajax({
                url: 'gt/validate-click',
                type: 'POST',
                dataType: 'json',
                data: {
                    username: $('#username2').val(),
                    password: $('#password2').val(),
                    geetest_challenge: result.geetest_challenge,
                    geetest_validate: result.geetest_validate,
                    geetest_seccode: result.geetest_seccode
                },
                success: function (data) {
                    if (data.status === 'success') {
                        alert('登录成功');
                    } else if (data.status === 'fail') {
                        alert('登录失败,请完成验证');
                        captchaObj.reset();
                    }
                }
            });
            // 更多前端接口说明请参见:http://docs.geetest.com/install/client/web-front/
        })
        window.gt = captchaObj;
    };

    $('#btn').click(function(){
        window.gt.verify();
    })

最后具体的项目代码可以参照: https://github.com/wwjhzc/A-validation
项目部署官方文档:https://docs.geetest.com/install/deploy/client/web
作者:rookie.he(kuke_kuke)
博客链接:http://blog.csdn.net/qq_33599109
欢迎关注支持,谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值