Commit 5d9c826567b9ca63022c304771fd5eb053fe9cae

Authored by u123231312
1 parent 54b28d20

PC接入智能验证

@@ -23,7 +23,7 @@ class Login extends Controller @@ -23,7 +23,7 @@ class Login extends Controller
23 if(request()->isPost()) { 23 if(request()->isPost()) {
24 $data = input('post.'); 24 $data = input('post.');
25 $admin = new Admin(); 25 $admin = new Admin();
26 - $return = $admin->login($data,$this->system['code']); 26 + $return = $admin->login($data,$this->system['code'],$this->system['ticket']);
27 return ['code' => $return['code'], 'msg' => $return['msg']]; 27 return ['code' => $return['code'], 'msg' => $return['msg']];
28 }else{ 28 }else{
29 return $this->fetch(); 29 return $this->fetch();
@@ -36,7 +36,7 @@ class Login extends Controller @@ -36,7 +36,7 @@ class Login extends Controller
36 // 验证码位数 36 // 验证码位数
37 'length' => 4, 37 'length' => 4,
38 // 关闭验证码杂点 38 // 关闭验证码杂点
39 - 'useNoise' => false, 39 + 'useNoise' => true,
40 'bg' => [255,255,255], 40 'bg' => [255,255,255],
41 ]; 41 ];
42 $captcha = new Captcha($config); 42 $captcha = new Captcha($config);
@@ -5,12 +5,35 @@ use think\Db; @@ -5,12 +5,35 @@ use think\Db;
5 class Admin extends Model 5 class Admin extends Model
6 { 6 {
7 protected $pk = 'admin_id'; 7 protected $pk = 'admin_id';
8 - public function login($data,$code){ 8 + public function login($data,$code,$ticket){
  9 + //是否开启图形验证码
9 if($code=='open'){ 10 if($code=='open'){
  11 + //图形验证码
10 if(!$this->check($data['vercode'])){ 12 if(!$this->check($data['vercode'])){
11 return ['code' => 0, 'msg' => '验证码错误']; 13 return ['code' => 0, 'msg' => '验证码错误'];
12 } 14 }
13 } 15 }
  16 + //是否开启腾讯验证码
  17 + if($ticket=='open'){
  18 + //腾讯图片验证码接入
  19 + if(!$data['ticket']||!$data['randstr']){
  20 + return ['code' => 0, 'msg' => '请点击按钮进行验证'];
  21 + }
  22 + $url ="https://ssl.captcha.qq.com/ticket/verify?aid=2049832761&AppSecretKey=0a_JIu1xvHoAuMltJ0h4jmw**&Ticket=".$data['ticket']."&Randstr=".$data['randstr']."&UserIP=".$_SERVER['REMOTE_ADDR'];
  23 + $ch = curl_init();
  24 + //设置选项,包括URL
  25 + curl_setopt($ch, CURLOPT_URL, $url);
  26 + curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  27 + curl_setopt($ch, CURLOPT_HEADER, 0);
  28 + //执行并获取HTML文档内容
  29 + $output = curl_exec($ch);
  30 + //释放curl句柄
  31 + curl_close($ch);
  32 + $output = json_decode($output,true);
  33 + if($output['response']!=1){
  34 + return ['code' =>0,'msg'=>$output['err_msg']];
  35 + }
  36 + }
14 $user=Db::name('admin')->where('username',$data['username'])->find(); 37 $user=Db::name('admin')->where('username',$data['username'])->find();
15 if($user) { 38 if($user) {
16 if ($user['is_open']==1 && $user['pwd'] == md5($data['password'])){ 39 if ($user['is_open']==1 && $user['pwd'] == md5($data['password'])){
@@ -19,9 +19,10 @@ @@ -19,9 +19,10 @@
19 </div> 19 </div>
20 20
21 <ul class="layui-nav admin-header-item" lay-filter="side-top-right"> 21 <ul class="layui-nav admin-header-item" lay-filter="side-top-right">
22 - {if session('username') eq "admin"}<li class="layui-nav-item" id="cache"> 22 + <li class="layui-nav-item" id="cache">
23 <a href="javascript:;">{:lang('clearCache')}</a> 23 <a href="javascript:;">{:lang('clearCache')}</a>
24 </li> 24 </li>
  25 + {if session('username') eq "admin"}
25 <li class="layui-nav-item"> 26 <li class="layui-nav-item">
26 <a href="{:url('home/index/index')}" target="_blank">{:lang('home')}</a> 27 <a href="{:url('home/index/index')}" target="_blank">{:lang('home')}</a>
27 </li> 28 </li>
@@ -8,6 +8,8 @@ @@ -8,6 +8,8 @@
8 <link rel="stylesheet" href="/static/plugins/layui/css/layui.css" media="all" /> 8 <link rel="stylesheet" href="/static/plugins/layui/css/layui.css" media="all" />
9 <link rel="stylesheet" href="/static/admin/css/login.css" /> 9 <link rel="stylesheet" href="/static/admin/css/login.css" />
10 <link rel="stylesheet" href="/static/common/css/font.css" /> 10 <link rel="stylesheet" href="/static/common/css/font.css" />
  11 + <!--腾讯智能验证码接入-->
  12 + <script src="https://ssl.captcha.qq.com/TCaptcha.js"></script>
11 </head> 13 </head>
12 <body class="beg-login-bg"> 14 <body class="beg-login-bg">
13 <div class="container login"> 15 <div class="container login">
@@ -41,6 +43,27 @@ @@ -41,6 +43,27 @@
41 </div> 43 </div>
42 </div> 44 </div>
43 {/if} 45 {/if}
  46 + {if $system['ticket'] == 'open'}
  47 + <input type="hidden" name="randstr"><input type="hidden" name="ticket">
  48 + <!--腾讯智能验证码接入 开始-->
  49 + <div class="layui-form-item" id="TencentCaptchaDiv">
  50 + <!--点击此元素会自动激活验证码-->
  51 + <!--id : 元素的id(必须)-->
  52 + <!--data-appid : AppID(必须)-->
  53 + <!--data-cbfn : 回调函数名(必须)-->
  54 + <!--data-biz-state : 业务自定义透传参数(可选)-->
  55 + <a class="layui-btn layui-btn-normal btn-blog" id="TencentCaptcha" data-appid="2049832761" data-cbfn="callback">点击按钮进行验证</a>
  56 + </div>
  57 + <div class="layui-form-item" id="TencentCaptchafnDiv" style="display:none">
  58 + <!--点击此元素会自动激活验证码-->
  59 + <!--id : 元素的id(必须)-->
  60 + <!--data-appid : AppID(必须)-->
  61 + <!--data-cbfn : 回调函数名(必须)-->
  62 + <!--data-biz-state : 业务自定义透传参数(可选)-->
  63 + <a class="layui-btn layui-btn-normal btn-blog" id="TencentCaptchafn">验证成功</a>
  64 + </div>
  65 + <!--腾讯智能验证码接入 结束-->
  66 + {/if}
44 <div class="layui-form-item"> 67 <div class="layui-form-item">
45 <button type="submit" class="layui-btn btn-submit btn-blog" lay-submit lay-filter="login">登录</button> 68 <button type="submit" class="layui-btn btn-submit btn-blog" lay-submit lay-filter="login">登录</button>
46 </div> 69 </div>
@@ -57,6 +80,20 @@ @@ -57,6 +80,20 @@
57 <script src="/static/admin/js/rAF.js"></script> 80 <script src="/static/admin/js/rAF.js"></script>
58 <script src="/static/admin/js/login.js"></script> 81 <script src="/static/admin/js/login.js"></script>
59 <script type="text/javascript" src="/static/plugins/layui/layui.js"></script> 82 <script type="text/javascript" src="/static/plugins/layui/layui.js"></script>
  83 +<!--腾讯智能验证码接入-->
  84 +<script src="/static/home/js/jquery.min.js"></script>
  85 +<script type="text/javascript">
  86 +window.callback = function(res){
  87 + // res(未通过验证)= {ret: 1, ticket: null}
  88 + // res(验证成功) = {ret: 0, ticket: "String", randstr: "String"}
  89 + if(res.ret === 0){
  90 + $("input[name='ticket']").val(res.ticket); // 票据
  91 + $("input[name='randstr']").val(res.randstr); // 随机串
  92 + $("#TencentCaptchaDiv").hide();
  93 + $("#TencentCaptchafnDiv").show();
  94 + }
  95 +}
  96 +</script>>
60 <script> 97 <script>
61 layui.use('form',function(){ 98 layui.use('form',function(){
62 var form = layui.form,$ = layui.jquery; 99 var form = layui.form,$ = layui.jquery;
@@ -114,13 +114,20 @@ @@ -114,13 +114,20 @@
114 </div> 114 </div>
115 </div> 115 </div>
116 <div class="layui-form-item"> 116 <div class="layui-form-item">
117 - <label class="layui-form-label">验证码</label> 117 + <label class="layui-form-label">图形验证码</label>
118 <div class="layui-input-block"> 118 <div class="layui-input-block">
119 <input type="radio" name="code" value="open" title="开启"> 119 <input type="radio" name="code" value="open" title="开启">
120 <input type="radio" name="code" value="close" title="关闭"> 120 <input type="radio" name="code" value="close" title="关闭">
121 </div> 121 </div>
122 </div> 122 </div>
123 <div class="layui-form-item"> 123 <div class="layui-form-item">
  124 + <label class="layui-form-label">智能验证码</label>
  125 + <div class="layui-input-block">
  126 + <input type="radio" name="ticket" value="open" title="开启">
  127 + <input type="radio" name="ticket" value="close" title="关闭">
  128 + </div>
  129 + </div>
  130 + <div class="layui-form-item">
124 <div class="layui-input-block"> 131 <div class="layui-input-block">
125 <button type="button" class="layui-btn" lay-submit="" lay-filter="sys">{:lang('submit')}</button> 132 <button type="button" class="layui-btn" lay-submit="" lay-filter="sys">{:lang('submit')}</button>
126 <button type="reset" class="layui-btn layui-btn-primary">{:lang('reset')}</button> 133 <button type="reset" class="layui-btn layui-btn-primary">{:lang('reset')}</button>