Showing
5 changed files
with
73 additions
and
5 deletions
| @@ -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> |
-
Please register or login to post a comment