\Phpcmf\Hooks::on('member_login_before', function ($post) {
$cname = 'xzyz'; // 對應(yīng)極驗別名 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>//引用極驗驗證碼官方j(luò)s
<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 為后臺別名
// 帶* 號 為不可缺少的內(nèi)容
initGeetest4({
captchaId: captchaId, //*對應(yīng)的極驗ID*根據(jù)別名獲取
product: product, //* 極驗代碼類型,可自行更改
language: "zho", //*驗證碼語言 zho 指的是中文
//如果使用popup 或者float 有一個額外按鈕,如需更改樣式請查看官方文檔 在此地方增加參數(shù)https://docs.geetest.com/gt4/apirefer/api/web
},
function (gt) {
gtInstance = gt;//將 gt 對象賦值給 gtInstance 變量
gt.appendTo("#captcha");//自動加載到id captcha
//onSuccess:驗證成功后執(zhí)行
gt.onSuccess(function () {
result = gt.getValidate();//驗證成功獲取的驗證字段賦值給result
//驗證碼驗證成功后再次執(zhí)行登錄代碼**(如果使用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>