美文网首页
极验geetest的使用

极验geetest的使用

作者: 晓函 | 来源:发表于2016-09-26 17:27 被阅读5396次

    前端:

    <script src="http://static.geetest.com/static/tools/gt.js"></script>
    
    <input class='btn btn-default' id="show-mobile-captcha" type="button" value="发送">
    <div id="popup-captcha-mobile" class="hide"></div>
    
    
    <script>
    
        $("#show-mobile-captcha").click(function () {
            //alert('ok');
            $("#popup-captcha-mobile").removeClass('hide');
        });
        var handlerPopupMobile = function (captchaObj) {
            // 将验证码加到id为captcha的元素里
            captchaObj.appendTo("#popup-captcha-mobile");
            //拖动验证成功后两秒(可自行设置时间)自动发生跳转等行为
            captchaObj.onSuccess(function () {
                var validate = captchaObj.getValidate();
                //alert(validate.geetest_challenge);
                $.ajax({
                    url: "mobile-geetest/ajax_validate", // 进行二次验证
                    type: "post",
                    dataType: "json",
                    data: {
                        // 二次验证所需的三个值
                        geetest_challenge: validate.geetest_challenge,
                        geetest_validate: validate.geetest_validate,
                        geetest_seccode: validate.geetest_seccode
                    },
                    success: function (data) {
                        if (data && (data.status === "success")) {
                            $(document.body).html('<h1>登录成功</h1>');
                        } else {
                            $(document.body).html('<h1>登录失败</h1>');
                        }
                    }
                });
            });
            // 更多接口参考:http://www.geetest.com/install/sections/idx-client-sdk.html
        };
        $.ajax({
            // 获取id,challenge,success(是否启用failback)
            url: "mobile-geetest/register?t=" + (new Date()).getTime(), // 加随机数防止缓存
            type: "get",
            dataType: "json",
            success: function (data) {
                // 使用initGeetest接口
                // 参数1:配置参数
                // 参数2:回调,回调的第一个参数验证码对象,之后可以使用它做appendTo之类的事件
                initGeetest({
                    gt: data.gt,
                    challenge: data.challenge,
                    offline: !data.success // 表示用户后台检测极验服务器是否宕机,一般不需要关注
                    // 更多配置参数请参见:http://www.geetest.com/install/sections/idx-client-sdk.html#config
                }, handlerPopupMobile);
            }
        });
    </script>
    

    后端:
    首先从https://github.com/GeeTeam/gt-python-sdk/
    下载geetest文件夹的geetest.py和init.py这2个文件放入自己的项目,
    我使用的是极验3.2版本,python是3.4版本
    从极验geetest下载的3.2版本的包,加入项目后,居然导致session出现各种莫名错误,明明在session设置了某个key的值,读取这个key的值就说不存在。莫名其妙,搞了一下午,最后尝试把开头的#!coding:utf8去掉,一下全部正常了,因为python默认就是utf-8的编码格式,不需要再画蛇添足了。

    Paste_Image.png

    然后是后端调用代码

    from ..common.geetest import GeetestLib
    import json
    
    #生成图片验证码
    @auth.route('/mobile-geetest/register', methods=["GET"])
    def get_mobile_captcha():
        mobile_geetest_id = "7c25da6fe21944cfe507d2f9876775a9"
        mobile_geetest_key = "f5883f4ee3bd4fa8caec67941de1b903"
        gt = GeetestLib(mobile_geetest_id, mobile_geetest_key)
        status = gt.pre_process()
    
        session[gt.GT_STATUS_SESSION_KEY] = status
        response_str = gt.get_response_str()
        return response_str
    
    
    #验证用户拖动结果
    @auth.route('/mobile-geetest/ajax_validate', methods=["GET","POST"])
    def mobile_ajax_validate():
    
        mobile_geetest_id = "7c25da6fe21944cfe507d2f9876775a9"
        mobile_geetest_key = "f5883f4ee3bd4fa8caec67941de1b903"
        gt = GeetestLib(mobile_geetest_id,mobile_geetest_key)
        challenge = request.form[gt.FN_CHALLENGE]
        validate = request.form[gt.FN_VALIDATE]
        seccode = request.form[gt.FN_SECCODE]
        status = session[gt.GT_STATUS_SESSION_KEY]
    
        if status:
            result = gt.success_validate(challenge, validate, seccode)
        else:
            result = gt.failback_validate(challenge, validate, seccode)
        result = {"status":"success"} if result else {"status":"fail"}
    
        return json.dumps(result)
        
    

    相关文章

      网友评论

          本文标题:极验geetest的使用

          本文链接:https://www.haomeiwen.com/subject/yfvqyttx.html