联系官方销售客服

1835022288

028-61286886

不进行二次验证是容易破解的
修改config/hooks.php

\Phpcmf\Hooks::on('member_login_before', function ($post) {
       $cname = 'xzyz'; // 对应极验别名 xzyz 替换别名


    $captcha_id = dr_geetest($cname, 2);
    
    $back = dr_redirect_safe_check((string)\Phpcmf\Service::L('input')->xss_clean($_POST['back'] ? \Phpcmf\Service::L('input')->post('back') : MEMBER_URL, true));
    $back = str_ireplace(['<iframe', '<', '/>'], '', $back);
    if (
        \Phpcmf\Service::C()->member_cache['login']['code']
        && !\Phpcmf\Service::L('Form')->check_captcha('code')
    ) {
        \Phpcmf\Service::C()->_json(0, dr_lang('图片验证码不正确'));
    }elseif ((!$post['username'])) {
        \Phpcmf\Service::C()->_json(0, dr_lang('账号必须填写'));
    }
     elseif ((!$post['password'])) {
        \Phpcmf\Service::C()->_json(0, dr_lang('密码必须填写'));
    } elseif (!$post['captcha_id']) {
        //(这里不要修改提示文字,这个有和前端交互)**
        \Phpcmf\Service::C()->_json(0, dr_lang('请完成验证'));
    } elseif ($post['captcha_id'] != $captcha_id) {
        \Phpcmf\Service::C()->_json(0, dr_lang('后端极验id于前端极验id不同,请检查别名'));
    } else {

            //验证成功 后登录
            $rt = \Phpcmf\Service::M('member')->login(dr_safe_username($post['username']), $post['password'], (int)$_POST['remember']);
            if ($rt['code']) {
                // 登录成功
                $rt['data']['url'] = urldecode($back);
            } else {
                \Phpcmf\Service::C()->_json(0, $rt['msg']);
            }
    }
});

前端代码和之前的教程一样

<script src="https://apps.bdimg.com/libs/jquery/1.9.1/jquery.js"></script>//引用jq
<script src="https://static.geetest.com/v4/gt4.js"></script>//引用极验验证码官方js
<script src="{THEME_PATH}assets/js/my.js"></script>//引用自定义js(这里修改了登录注册的js代码用于交互)


<div id="captcha"></div>
<script>
var result;//声明一个变量用于存储验证成功字段
var gtInstance;// 声明一个变量用于存储 gt 对象
var product ="popup"; // 声明一个变量用于存储 极验代码类型,popup(弹出式)float(浮动式)bind(隐藏按钮类型)
var captchaId="{dr_geetest('xzyz', 2)}"; // 声明一个变量用于存储  极验ID,xzyz 为后台别名

    // 带* 号 为不可缺少的内容
    initGeetest4({
        captchaId: captchaId, //*对应的极验ID*根据别名获取
         product: product, //* 极验代码类型,可自行更改
        language: "zho", //*验证码语言 zho 指的是中文
        //如果使用popup 或者float 有一个额外按钮,如需更改样式请查看官方文档 在此地方增加参数https://docs.geetest.com/gt4/apirefer/api/web
    }, 
    function (gt) {
         gtInstance = gt;//将 gt 对象赋值给 gtInstance 变量
         gt.appendTo("#captcha");//自动加载到id captcha
         
         //onSuccess:验证成功后执行
          gt.onSuccess(function () {
               result = gt.getValidate();//验证成功获取的验证字段赋值给result
               
               //验证码验证成功后再次执行登录代码**(如果使用bind隐藏类型,请删除下面的代码注释)
               //dr_ajax_member('{dr_member_url('login/index')}', 'myform',result,gtInstance,product);
               
               //登录的验证js做了二次修改,
               //dr_ajax_member('url登录地址','表单id',result变量,gtInstance变量,product变量);
          })
        
    });
     
</script>

 <button  onclick=" dr_ajax_member('{dr_member_url('login/index')}', 'myform',result,gtInstance,product);" type="button"  class="btn green pull-right"> 登录 </button>


打赏作者