Przeglądaj źródła

'添加登陆验证,后台设置登陆验证信息'

Ethan 6 lat temu
rodzic
commit
06bf7d8556

+ 38 - 0
application/admin/controller/System.php

@@ -794,4 +794,42 @@ class System extends Base
         return $operate;
     }
 
+
+    /**
+     * 验证平台设置
+     *
+     * @access public
+     */
+    public function platform()
+    {
+        // 表单提交.
+        if (request()->isPost()) {
+            $param = input('post.');
+
+            try {
+                $updateWhere['platform_code'] = 'Customer-Service';
+                $updateData = [
+                    'platform_url_token' => $param['urlToken'],
+                    'platform_url_code'  => $param['urlToken'],
+                ];
+                db('platform')->where($updateWhere)->update($updateData);
+                return json(['code' => 1, 'data' => '', 'msg' => '设置成功']);
+            } catch (\Exception $e) {
+                return json(['code' => -2, 'data' => '', 'msg' => $e->getMessage()]);
+            }//end try
+        }//end if
+
+        // 信息.
+        $settings = db('platform')->find();
+        $this->assign(
+            [
+                'urlToken' => $settings['platform_url_token'],
+                'urlCode' => $settings['platform_url_code'],
+            ]
+        );
+
+        return $this->fetch();
+
+    }//end basics()
+
 }

+ 146 - 0
application/admin/view/system/platform.html

@@ -0,0 +1,146 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>编辑管理员</title>
+    <link rel="shortcut icon" href="favicon.ico">
+    <link href="__CSS__/bootstrap.min.css?v=3.3.6" rel="stylesheet">
+    <link href="__CSS__/font-awesome.min.css?v=4.4.0" rel="stylesheet">
+    <link href="__CSS__/animate.min.css" rel="stylesheet">
+    <link href="__JS__/layui/css/layui.css" rel="stylesheet">
+    <link href="__CSS__/style.min.css?v=4.1.0" rel="stylesheet">
+</head>
+<body class="gray-bg">
+
+<div class="wrapper wrapper-content animated fadeInRight">
+    <div class="row">
+        <div class="col-sm-8">
+            <div class="ibox float-e-margins">
+                <div class="ibox-title">
+                    <h5>验证平台设置</h5>
+                </div>
+                <div class="ibox-content">
+                    <form class="form-horizontal m-t layui-form" id="commentForm" method="post" action="{:url('system/platform')}">
+                        <div class="form-group">
+                            <label class="col-sm-3 control-label">绑定地址:</label>
+                            <div class="input-group col-sm-4">
+                                <input type="text" class="form-control" name="urlToken" required="" aria-required="true" value="{$urlToken}">
+                            </div>
+                        </div>
+                        <div class="form-group">
+                            <label class="col-sm-3 control-label">验证地址:</label>
+                            <div class="input-group col-sm-4">
+                                <input type="text" class="form-control" name="urlToken" required="" aria-required="true" value="{$urlToken}">
+                            </div>
+                        </div>
+
+                        <div class="form-group" style="margin-top: 40px;">
+                            <label class="col-sm-3 control-label"></label>
+                            <div class="input-group col-sm-4">
+                                <button class="btn btn-primary btn-sm" type="submit">提交</button>
+                            </div>
+                        </div>
+                    </form>
+                </div>
+            </div>
+
+        </div>
+    </div>
+</div>
+<script src="__JS__/jquery.min.js?v=2.1.4"></script>
+<script src="__JS__/bootstrap.min.js?v=3.3.6"></script>
+<script src="__JS__/content.min.js?v=1.0.0"></script>
+<script src="__JS__/plugins/validate/jquery.validate.min.js"></script>
+<script src="__JS__/plugins/validate/messages_zh.min.js"></script>
+<script src="__JS__/plugins/layer/layer.min.js"></script>
+<script src="__JS__/layui/layui.js"></script>
+<script src="__JS__/jquery.form.js"></script>
+<script src="/static/customer/js/md5.js"></script>
+<script>
+    function checkImage() {
+        $("#all_blank_img").css({"z-index": "19991015", "background-color": "rgb(0, 0, 0)", "opacity": "0.3", "display": "block"});
+        $("#check_image").css({"z-index": "19991016", "top": "40px", "left": "170px", "width": "70vw", "display": "block"});
+    }
+    function closeCheckImage() {
+        $("#all_blank_img").css({"display": "none"});
+        $("#check_image").css({"display": "none"});
+    }
+    function onCheckImage(path) {
+        $("#all_blank_img").css({"display": "none"});
+        $("#check_image").css({"display": "none"});
+        $("#ChoiceImg").attr('src',path);
+        $("#advertisement_img").val(path);
+    }
+
+    function checkImg() {
+        $("#all_blank").css({"z-index": "19991015", "background-color": "rgb(0, 0, 0)", "opacity": "0.3", "display": "block"});
+        $("#check_img").css({"z-index": "19991016", "top": "40px", "left": "170px", "width": "70vw", "display": "block"});
+    }
+    function closeCheckImg() {
+        $("#all_blank").css({"display": "none"});
+        $("#check_img").css({"display": "none"});
+    }
+    function onCheckImg(path) {
+        $("#all_blank").css({"display": "none"});
+        $("#check_img").css({"display": "none"});
+        $("#onChoiceImg").attr('src',path);
+        $("#logo_img").val(path);
+    }
+</script>
+<script type="text/javascript">
+
+  var index = '';
+  function showStart(){
+    index = layer.load(0, {shade: false});
+    return true;
+  }
+
+    function showSuccess(res){
+
+        layer.ready(function(){
+            layer.close(index);
+            if(1 == res.code){
+                layer.alert(res.msg, {title: '友情提示', icon: 1, closeBtn: 0}, function(){
+                    window.location.href = res.data;
+                });
+            }else if(111 == res.code){
+                window.location.reload();
+            }else{
+                layer.msg(res.msg, {anim: 6});
+            }
+        });
+    }
+
+  $(document).ready(function(){
+    // 添加管理员
+    var options = {
+      beforeSubmit:showStart,
+      success:showSuccess
+    };
+
+    $('#commentForm').submit(function(){
+      $(this).ajaxSubmit(options);
+      return false;
+    });
+  });
+
+  // 表单验证
+  $.validator.setDefaults({
+    highlight: function(e) {
+      $(e).closest(".form-group").removeClass("has-success").addClass("has-error")
+    },
+    success: function(e) {
+      e.closest(".form-group").removeClass("has-error").addClass("has-success")
+    },
+    errorElement: "span",
+    errorPlacement: function(e, r) {
+      e.appendTo(r.is(":radio") || r.is(":checkbox") ? r.parent().parent().parent() : r.parent())
+    },
+    errorClass: "help-block m-b-none",
+    validClass: "help-block m-b-none"
+  });
+
+</script>
+</body>
+</html>

+ 102 - 0
application/common.php

@@ -119,3 +119,105 @@ function perDisplay($dit, $xiaos = 2)
     return floatPointDigit(floor(100 * $dit), $xiaos) . '%';
 }
 
+/**
+ * 数据加密
+ */
+function lock_url($txt, $key)
+{
+    $chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-=+";
+    $nh = rand(0, 64);
+    $ch = $chars[$nh];
+    $mdKey = md5($key.$ch);
+    $mdKey = substr($mdKey,$nh%8, $nh%8+7);
+    $txt = base64_encode($txt);
+    $tmp = '';
+    $i = 0;
+    $j = 0;
+    $k = 0;
+    for ($i=0; $i<strlen($txt); $i++) {
+        $k = $k == strlen($mdKey) ? 0 : $k;
+        $j = ($nh+strpos($chars,$txt[$i])+ord($mdKey[$k++]))%64;
+        $tmp .= $chars[$j];
+    }
+    return urlencode($ch.$tmp);
+}
+
+/**
+ * 数据解密
+ */
+function unlock_url($txt, $key)
+{
+    $txt = urldecode($txt);
+    $chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-=+";
+    $ch = $txt[0];
+    $nh = strpos($chars,$ch);
+    $mdKey = md5($key.$ch);
+    $mdKey = substr($mdKey,$nh%8, $nh%8+7);
+    $txt = substr($txt,1);
+    $tmp = '';
+    $i = 0;
+    $j = 0;
+    $k = 0;
+    for ($i=0; $i<strlen($txt); $i++) {
+        $k = $k == strlen($mdKey) ? 0 : $k;
+        $j = strpos($chars,$txt[$i])-$nh - ord($mdKey[$k++]);
+        while ($j<0) $j+=64;
+        $tmp .= $chars[$j];
+    }
+    return base64_decode($tmp);
+}
+
+
+/**
+ * 接口调用
+ *
+ * @access public
+ * @param mixed $url 接口地址
+ * @param mixed $where $params参数
+ * @param mixed $timeout 请求时效
+ * @return String
+ */
+function make_request($url, $params, $timeout=30)
+{
+    set_time_limit(0);
+    if (function_exists('curl_init') === true) {
+        $ch = curl_init();
+        $header = array(
+            'Accept-Language: zh-cn',
+            'Connection: Keep-Alive',
+            'Cache-Control: no-cache'
+        );
+        curl_setopt($ch, CURLOPT_POST, 1);
+        curl_setopt($ch, CURLOPT_URL, $url);
+        curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
+        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+        curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
+        if ($timeout > 0) curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
+        $result = curl_exec($ch);
+        $errno = curl_errno($ch);
+        curl_close($ch);
+        return $result;
+    } else {
+        $context = array(
+            'http' => array(
+                'method' => 'POST',
+                'header' => 'Content-type: application/x-www-form-urlencoded' . "\r\n" .
+                    'Content-length: ' . strlen($params),
+                'content' => $params));
+        if ($timeout > 0) $context['http']['timeout'] = $timeout;
+        $contextid = stream_context_create($context);
+        $sock = @fopen($url, 'r', false, $contextid);
+        if ($sock) {
+            $result = '';
+            while (!feof($sock)) {
+                $result .= fgets($sock, 8192);
+            }
+            fclose($sock);
+        } else {
+            return 'TimeOut';
+        }
+    }
+    return $result;
+
+}//end make_request()
+

+ 30 - 0
application/service/controller/Login.php

@@ -68,6 +68,36 @@ class Login extends Controller
         $group = db('groups')->where('id', $user[0]['group_id'])->find();
         $user[0]['group'] = $group['name'];
 
+        // 是否为手机app验证平台登录.
+        $param = input('post.');
+        $verifySystem   = isset($param['verifySystem']) ? $param['verifySystem'] : '';
+        $verifySystemId = isset($param['verifySystemId']) ? $param['verifySystemId'] : '';
+        $platformData = db('platform')->find();
+        if (empty($verifySystem) === false) {
+            $appUserName = unlock_url($verifySystem, $platformData['platform_code']);
+            $verifyData = json_encode([
+                'appUserName' => $appUserName,
+                'userAccount' => $userAccount,
+            ], 256);
+            $verifyToken = lock_url($verifyData, $platformData['platform_code']);
+            $platformUrl = $platformData['platform_url_token'].'?backSystem='.$verifyToken.'&verifySystemId='.$verifySystemId;
+            $backData = make_request($platformUrl, '');
+            return $backData;
+        }
+
+        // 验证码验证.
+        $securityCode = isset($param['securityCode']) ? $param['securityCode'] : '';
+        $securityData = json_encode([
+            'platformUser' => $userAccount,
+            'code' => $securityCode,
+        ], 256);
+        $securityToken = lock_url($securityData, $platformData['platform_code']);
+        $platformUrl = $platformData['platform_url_code'].'?backSystem='.$securityToken.'&verifySystemId='.$verifySystemId;
+        $backData = json_decode(make_request($platformUrl, ''), true);
+        if ($backData['code'] != 1) {
+            return json(['code' => 2, 'data' => [], 'msg' => '验证码错误']);
+        }
+
         $this->assign([
             'token' => $token,
             'user_name' => $user[0]['user_name'],