美文网首页
ThinkPHP使用极验验证

ThinkPHP使用极验验证

作者: ONEDAYLOG | 来源:发表于2020-05-12 08:27 被阅读0次

    1、极验验证官网http://www.geetest.com/,与以往传统验证码不同的是,极验通过分析用户完成拼图过程中的行为特征,通过数据分析来判断是人还是机器。用户不必面对眼花缭乱的英文字符或汉字,整个验证过程变的像游戏一样有趣。

    如图:

    blob.png

    2、首先先下载好极验的php的压缩包,链接: http://pan.baidu.com/s/1bpHRvsV 密码: 3b4m

    3、复制gt-php-sdk-master\gt-php-sdk-master\lib\class.geetestlib.php文件到ThinkPHP\Extend\Vendor\Geetestlib下,没有文件夹则需要新建文件夹

    4、极验主要分为两步,第一次请求是请求得到拖拽图片,第二次请求是验证拖拽的正确性

    5、前端HTML中

    <div id="float-captcha" style="margin-top: 40px;"></div>
     
    $.ajax({
    // 获取id,challenge,success(是否启用failback)
    url: "/index.php?m=Index&a=StartCaptchaServlet&t=" + (new Date()).getTime(), 
    type: "get",
    dataType: "json",
    success: function (data) {
        data =  $.parseJSON(data);
        initGeetest({
            gt: data.gt,
            challenge: data.challenge,
            product: "float", 
            offline: !data.success 
        }, handlerPopup);
    }
    });
     
    var handlerPopup = function (captchaObj) {
     
    $("#loginAction").click(function () {
        var validate = captchaObj.getValidate();
        if (!validate) {
            shwoDialog(true,"请先完成验证");
     
            return;
        }
     
        if(checkLogin()){
            // 二次验证所需的三个值
     
        $.ajax({
            type: 'POST',
            url: '/index.php?m=Index&a=btnLogin',
            data: {
                loginName: $("#loginName").val(),
                loginPassword:md5($("#loginPassword").val()).substring(8,24),
                geetest_challenge: validate.geetest_challenge,
                geetest_validate: validate.geetest_validate,
                geetest_seccode: validate.geetest_seccode
            },
            dataType: 'json',
            //timeout: 3000,
            success: function(rs){
                if(rs.status == 1){
                    window.location = "/index.php?m=Index&a=index";
                }else{
                    shwoDialog(true,rs.info);
                }
     
            },
            error: function(xhr, type){
                shwoDialog(true,"访问不到服务器");
            }
        });
        }
     
    });
     
    captchaObj.bindOn("#loginAction");
    captchaObj.appendTo("#float-captcha");
     
    };
    

    6、服务器端

    /**
         * 极验初始验证
         */
        public function StartCaptchaServlet () {
            vendor('Geetestlib.class#geetestlib');
            $GtSdk = new GeetestLib(C("CAPTCHA_ID"), C("PRIVATE_KEY"));
            session_start();
            $user_id = "test";
            $status = $GtSdk->pre_process($user_id);
            $_SESSION['gtserver'] = $status;
            $_SESSION['user_id'] = $user_id;
     
            $this->ajaxReturn($GtSdk->get_response_str());
     
        }
     
        /**
         * 极验二次验证
         * @return bool
         */
        public  function VerifyLoginServlet(){
            vendor('Geetestlib.class#geetestlib');
            session_start();
            $GtSdk = new GeetestLib(C("CAPTCHA_ID"), C("PRIVATE_KEY"));
            $user_id = $_SESSION['user_id'];
            if ($_SESSION['gtserver'] == 1) {
                $result = $GtSdk->success_validate($_POST['geetest_challenge'], 
                $_POST['geetest_validate'], 
                $_POST['geetest_seccode'], $user_id);
                if ($result) {
                    return true;
                } else{
                    return false;
                }
            }else{
                if ($GtSdk->fail_validate($_POST['geetest_challenge'],
                $_POST['geetest_validate'],
                $_POST['geetest_seccode'])) {
                    return true;
                }else{
                    return false;
                }
            }
        }
    

    7、登录验证

    /**
         * 用户登录提交
         * @param $loginName
         * @param $loginPassword
         * @param bool $isRemember
         */
        public function  btnLogin($loginName,$loginPassword,$isRemember = true){
     
            if($this->VerifyLoginServlet()){
                $Model = new Model();
                $sqlNews = "";
                $DataUser = $Model->query( $sqlNews );
                if($DataUser){
                $Model->execute("sql 语句");
     
                if($DataUser[0]['PassWord'] == $loginPassword){
                    if($isRemember == ture){
                         session('User',$DataUser[0]);
                    }else{
                        session(null);
                    }
                    $this->ajaxReturn(0,"登录成功!",1,'JSON');
                }else{
                    $this->ajaxReturn(0,"密码不正确!",0,'JSON');
                }
            }else{
                $this->ajaxReturn(0,"用户名不存在!",0,'JSON');
            }
            }else{
                $this->ajaxReturn(0,"验证不正确!",0,'JSON');
            }
     
        }
    

    相关文章

      网友评论

          本文标题:ThinkPHP使用极验验证

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