zoukankan      html  css  js  c++  java
  • 小程序之旅——第五站(登陆)

    一、页面

    创建application/admin/view/login/login.html文件

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
        <meta charset="utf-8" />
        <title>后台管理</title>
        <meta name="description" content="User login page" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" />
        <!-- bootstrap & fontawesome -->
        <link rel="stylesheet" href="{:config('public.static')}/ace1.4/assets/css/bootstrap.min.css" />
        <link rel="stylesheet" href="{:config('public.static')}/ace1.4/assets/font-awesome/4.5.0/css/font-awesome.min.css" />
        <!-- text fonts -->
        <link rel="stylesheet" href="{:config('public.static')}/ace1.4/assets/css/fonts.googleapis.com.css" />
        <!-- ace styles -->
        <link rel="stylesheet" href="{:config('public.static')}/ace1.4/assets/css/ace.min.css" />
        <!--[if lte IE 9]>
                    <link rel="stylesheet" href="{:config('public.static')}/ace1.4/assets/css/ace-part2.min.css" />
            <![endif]-->
        <link rel="stylesheet" href="{:config('public.static')}/ace1.4/assets/css/ace-rtl.min.css" />
        <!--[if lte IE 9]>
              <link rel="stylesheet" href="{:config('public.static')}/ace1.4/assets/css/ace-ie.min.css" />
            <![endif]-->
        <!-- HTML5shiv and Respond.js for IE8 to support HTML5 elements and media queries -->
        <!--[if lte IE 8]>
            <script src="{:config('public.static')}/ace1.4/assets/js/html5shiv.min.js"></script>
            <script src="{:config('public.static')}/ace1.4/assets/js/respond.min.js"></script>
            <![endif]-->
    </head>
    
    <body class="login-layout">
        <div class="main-container">
            <div class="main-content">
                <div class="row">
                    <div class="col-sm-10 col-sm-offset-1">
                        <div class="login-container">
                            <div class="center">
                                <h1>
    
                                        <span class="red"> </span>
                                        <span class="white" id="id-text2">后 台 管 理</span>
                                    </h1>
                            </div>
                            <div class="space-6"></div>
                            <div class="position-relative">
                                <div id="login-box" class="login-box visible widget-box no-border">
                                    <div class="widget-body">
                                        <div class="widget-main">
                                            <h4 class="header blue lighter bigger">
                                                    <i class="ace-icon fa fa-coffee green"></i>
                                                    注:公共场请不要记住密码
                                                </h4>
                                            <div class="space-6"></div>
                                            <form action="" method="post" name="myform">
                                                <fieldset>
                                                    <label class="block clearfix">
                                                        <span class="block input-icon input-icon-right">
                                                                <input type="text" class="form-control" name="username" placeholder="Username" value="" />
                                                                <i class="ace-icon fa fa-user"></i>
                                                            </span>
                                                    </label>
                                                    <label class="block clearfix">
                                                        <span class="block input-icon input-icon-right">
                                                                <input type="password" name="password" class="form-control" placeholder="Password"  value=""/>
                                                                <i class="ace-icon fa fa-lock"></i>
                                                            </span>
                                                    </label>
                                                    <div class="space"></div>
                                                    <div class="clearfix">
                                                        <label class="inline">
                                                            <input type="checkbox" name="islogin" class="ace" />
                                                            <span class="lbl">记住密码</span>
                                                        </label>
                                                        <input type="hidden" name="dosubmit" value="1">
                                                        <button onclick="myform.submit()" type="button" class="width-35 pull-right btn btn-sm btn-primary">
                                                            <i class="ace-icon fa fa-key"></i>
                                                            <span class="bigger-110">登陆</span>
                                                        </button>
                                                    </div>
                                                    <div class="space-4"></div>
                                                </fieldset>
                                            </form>
                                            <div class="social-or-login center">
                                                <span class="bigger-110">其他登陆</span>
                                            </div>
                                            <div class="space-6"></div>
                                            <div class="social-login center">
                                                <a class="btn btn-primary">
                                                        <i class="ace-icon fa fa-wechat"></i>
                                                    </a>
                                                <a class="btn btn-info">
                                                        <i class="ace-icon fa fa-qq"></i>
                                                    </a>
                                                <a class="btn btn-danger">
                                                        <i class="ace-icon fa fa-google-plus"></i>
                                                    </a>
                                            </div>
                                        </div>
                                        <!-- /.widget-main -->
                                        <div class="toolbar clearfix">
                                            <div>
                                                <a href="#" data-target="#forgot-box" class="forgot-password-link">
                                                        <i class="ace-icon fa fa-arrow-left"></i>
                                                        忘记密码
                                                    </a>
                                            </div>
                                            <div>
                                                <a href="#" data-target="#signup-box" class="user-signup-link">
                                                        注册
                                                        <i class="ace-icon fa fa-arrow-right"></i>
                                                    </a>
                                            </div>
                                        </div>
                                    </div>
                                    <!-- /.widget-body -->
                                </div>
                                <!-- /.login-box -->
                                <div id="forgot-box" class="forgot-box widget-box no-border">
                                    <div class="widget-body">
                                        <div class="widget-main">
                                            <h4 class="header red lighter bigger">
                                                    <i class="ace-icon fa fa-key"></i>
                                                    Retrieve Password
                                                </h4>
                                            <div class="space-6"></div>
                                            <p>
                                                Enter your email and to receive instructions
                                            </p>
                                            <form>
                                                <fieldset>
                                                    <label class="block clearfix">
                                                        <span class="block input-icon input-icon-right">
                                                                <input type="email" class="form-control" placeholder="Email" />
                                                                <i class="ace-icon fa fa-envelope"></i>
                                                            </span>
                                                    </label>
                                                    <div class="clearfix">
                                                        <button type="button" class="width-35 pull-right btn btn-sm btn-danger">
                                                            <i class="ace-icon fa fa-lightbulb-o"></i>
                                                            <span class="bigger-110">Send Me!</span>
                                                        </button>
                                                    </div>
                                                </fieldset>
                                            </form>
                                        </div>
                                        <!-- /.widget-main -->
                                        <div class="toolbar center">
                                            <a href="#" data-target="#login-box" class="back-to-login-link">
                                                    Back to login
                                                    <i class="ace-icon fa fa-arrow-right"></i>
                                                </a>
                                        </div>
                                    </div>
                                    <!-- /.widget-body -->
                                </div>
                                <!-- /.forgot-box -->
                                <div id="signup-box" class="signup-box widget-box no-border">
                                    <div class="widget-body">
                                        <div class="widget-main">
                                            <h4 class="header green lighter bigger">
                                                    <i class="ace-icon fa fa-users blue"></i>
                                                    注册
                                                </h4>
                                            <div class="space-6"></div>
                                            <p> 填写以下信息: </p>
                                            <form>
                                                <fieldset>
                                                    <label class="block clearfix">
                                                        <span class="block input-icon input-icon-right">
                                                                <input type="email" class="form-control" placeholder="Email" />
                                                                <i class="ace-icon fa fa-envelope"></i>
                                                            </span>
                                                    </label>
                                                    <label class="block clearfix">
                                                        <span class="block input-icon input-icon-right">
                                                                <input type="text" class="form-control" placeholder="Username" />
                                                                <i class="ace-icon fa fa-user"></i>
                                                            </span>
                                                    </label>
                                                    <label class="block clearfix">
                                                        <span class="block input-icon input-icon-right">
                                                                <input type="password" class="form-control" placeholder="Password" />
                                                                <i class="ace-icon fa fa-lock"></i>
                                                            </span>
                                                    </label>
                                                    <label class="block clearfix">
                                                        <span class="block input-icon input-icon-right">
                                                                <input type="password" class="form-control" placeholder="Repeat password" />
                                                                <i class="ace-icon fa fa-retweet"></i>
                                                            </span>
                                                    </label>
                                                    <label class="block">
                                                        <input type="checkbox" class="ace" />
                                                        <span class="lbl">
                                                                我同意
                                                                <a href="#">用户协议</a>
                                                            </span>
                                                    </label>
                                                    <div class="space-24"></div>
                                                    <div class="clearfix">
                                                        <button type="reset" class="width-30 pull-left btn btn-sm">
                                                            <i class="ace-icon fa fa-refresh"></i>
                                                            <span class="bigger-110">重置</span>
                                                        </button>
                                                        <button type="button" class="width-65 pull-right btn btn-sm btn-success">
                                                            <span class="bigger-110">注册</span>
                                                            <i class="ace-icon fa fa-arrow-right icon-on-right"></i>
                                                        </button>
                                                    </div>
                                                </fieldset>
                                            </form>
                                        </div>
                                        <div class="toolbar center">
                                            <a href="#" data-target="#login-box" class="back-to-login-link">
                                                    <i class="ace-icon fa fa-arrow-left"></i>
                                                    返回登陆
                                                </a>
                                        </div>
                                    </div>
                                    <!-- /.widget-body -->
                                </div>
                                <!-- /.signup-box -->
                            </div>
                            <!-- /.position-relative -->
                        </div>
                    </div>
                    <!-- /.col -->
                </div>
                <!-- /.row -->
            </div>
            <!-- /.main-content -->
        </div>
        <!-- /.main-container -->
        <!-- basic scripts -->
        <!--[if !IE]> -->
        <script src="{:config('public.static')}/ace1.4/assets/js/jquery-2.1.4.min.js"></script>
        <!-- <![endif]-->
        <!--[if IE]>
    <script src="{:config('public.static')}/ace1.4/assets/js/jquery-1.11.3.min.js"></script>
    <![endif]-->
        <script type="text/javascript">
        if ('ontouchstart' in document.documentElement)
            document.write("<script src='assets/js/jquery.mobile.custom.min.js'>" + "<" + "/script>");
        </script>
        <!-- inline scripts related to this page -->
        <script type="text/javascript">
        jQuery(function($) {
            $(document).on('click', '.toolbar a[data-target]', function(e) {
                e.preventDefault();
                var target = $(this).data('target');
                $('.widget-box.visible').removeClass('visible'); //hide others
                $(target).addClass('visible'); //show target
            });
        });
    
    
    
        //you don't need this, just used for changing background
        jQuery(function($) {
            $('#btn-login-dark').on('click', function(e) {
                $('body').attr('class', 'login-layout');
                $('#id-text2').attr('class', 'white');
                $('#id-company-text').attr('class', 'blue');
    
                e.preventDefault();
            });
            $('#btn-login-light').on('click', function(e) {
                $('body').attr('class', 'login-layout light-login');
                $('#id-text2').attr('class', 'grey');
                $('#id-company-text').attr('class', 'blue');
    
                e.preventDefault();
            });
            $('#btn-login-blur').on('click', function(e) {
                $('body').attr('class', 'login-layout blur-login');
                $('#id-text2').attr('class', 'white');
                $('#id-company-text').attr('class', 'light-blue');
    
                e.preventDefault();
            });
    
        });
        </script>
    </body>
    
    </html>
    {:config('public.static')}获取config文件定义的变量,这里是指public/static文件夹

    二、Controller文件

    创建application/admin/controller/Login.php文件

    <?php
    
    /**
     * @Author: ZouQH
     * @Date:   2017-10-10 09:48:28
     * @Last Modified by:   ZouQH
     * @Last Modified time: 2017-10-13 15:52:14
     */
    namespace appadmincontroller;
    
    use thinkController;
    use thinkLoader;
    
    class Login extends Controller {
        
       /**
         * 登入
         */
        public function index() {
            //dump(request()->ip());exit;
    
    
            if ($_POST['dosubmit']) {
                $username = input('post.username');
                $password = input('post.password');
    
                if (!$username) {
                    $this->error('用户名不能为空');
                }
                if (!$password) {
                    $this->error('密码不能为空');
                }
    
                $info = db('user')->field('id,name,password')->where('name', $username)->find();
    
                if (!$info) {
                    $this->error('用户不存在');
                }
                // dump(md5($password));
                if (md5($password) != $info['password']) {
                    $this->error('密码不正确');
                } else {
                    session('user_name', $info['name']);
                    session('user_id', $info['id']);
                    if (input('post.islogin')) {
                        cookie('user_name', encry_code($info['name']));
                        cookie('user_id', encry_code($info['id']));
                    }
    
                    //记录登录信息
                    Loader::model('User')->editInfo(1, $info['id']);
                    $this->success('登入成功', 'index/index');
                }
            } else {
                if (session('user_name')) {
                    $this->success('您已登入', 'index/index');
                }
    
                if (cookie('user_name')) {
                    $username = encry_code(cookie('user_name'),'DECODE');
                    $info = db('user')->field('id,name,password')->where('name', $username)->find();
                    if ($info) {
                        //记录
                        session('user_name', $info['name']);
                        session('user_id', $info['id']);
                        Loader::model('User')->editInfo(1, $info['id']);
                        $this->success('登入成功', 'index/index');
                    }
                }
    
                $this->view->engine->layout(false);
                return $this->fetch('login');
            }
        }
    
        /**
         * 登出
         */
        public function logout() {
            session('user_name', null);
            session('user_id', null);
            cookie('user_name', null);
            cookie('user_id', null);
            $this->success('退出成功', 'login/index');
        }
    
    }

    用户名、密码正确则存入session中

    并且跳转至index/index首页

    三、Model模型

    创建/application/admin/model/User.php

    <?php
    
    /**
     * @Author: ZouQH
     * @Date:   2017-10-10 15:36:55
     * @Last Modified by:   ZouQH
     * @Last Modified time: 2017-10-10 15:41:55
     */
    namespace appadminmodel;
    
    use thinkModel;
    use thinkDb;
    
    class User extends Model {
        
        public $status = array(1 => '无效', 2 => '有效');
    
        public function getInfo($id) {
            $res = $this->field('id,name,lastlogin_ip,lastlogin_time,email,phone,realname,openid,status')
                    ->where(array('id' => $id))
                    ->find();
            if ($res) {
                $res = $res->data;
            }
    
            return $res;
        }
    
        /**
         * 
         * @param int $userid 用户ID
         * @return Array
         */
        public function getUserGroups($uid) {
    
            $res = db('gp_user')->field('gp_id')->where('user_id', $uid)->select();
    
            $userGroups = '';
            if ($res) {
                foreach ($res as $k => $v) {
                    $userGroups .= $v['gp_id'] . ',';
                }
                return trim($userGroups, ',');
            } else {
                return false;
            }
        }
    
        /**
         * 登陆更新
         * @param int $type 1:登陆更新,2:信息更新
         * @param int $id id
         * @param array $data 更新的数据
         */
        public function editInfo($type, $id, $data = array()) {
            
            if ($type == 1) {
                $data['lastlogin_time'] = time();
                $data['lastlogin_ip'] = ip2long(request()->ip());
            } elseif ($type == 2) {
                $data['updatetime'] = time();
            }
            $res = $this->allowField(true)->save($data, ['id' => $id]);
    
            return $res;
        }
    
    }

    创建Permssion.php模型文件

    <?php
    
    /**
     * @Author: ZouQH
     * @Date:   2017-10-13 15:15:22
     * @Last Modified by:   ZouQH
     * @Last Modified time: 2017-10-13 16:32:04
     */
    namespace appadminmodel;
    use thinkModel;
    use thinkDb;
    
    class Permission extends Model {
        
        function __construct(){
            
        }
    
        /**
         * 获取用户的权限
         * @param  string $user_id [description]
         * @return string          [description]
         */
        public function getPermsByUser($user_id){
            
            try{
                $res=Db::query('SELECT
                        perm_id
                    FROM
                        ord_perm_role
                    WHERE
                        role_id IN (
                            SELECT
                                a.*
                            FROM
                                (
                                    (
                                        SELECT
                                            ur.role_id
                                        FROM
                                            ord_user_role ur
                                        WHERE
                                            ur.user_id = '.$user_id.'
                                    )
                                    UNION ALL
                                        (
                                            SELECT
                                                gr.role_id
                                            FROM
                                                ord_gp_role gr
                                            JOIN ord_gp_user gu
                                            WHERE
                                                gu.user_id = '.$user_id.'
                                            AND gu.gp_id = gr.gp_id
                                        )
                                ) a
                        )');
            }catch(Exception $e){
                $e->getMessage();
            }
            if (!$res) {
                return false;
            }
            foreach ($res as $k => $v) {
                    $tmp .=$v['perm_id'] . ',';
                }
    
                $perm_ids = trim($tmp, ',');
            return $perm_ids;
        }
    }

    四、权限获取

    在用户登陆成功后调用首页Index控制器前进行权限获取

    创建/application/admin/controller/Index/index.php

    <?php
    
    /**
     * @Author: ZouQH
     * @Date:   2017-09-30 10:40:08
     * @Last Modified by:   ZouQH
     * @Last Modified time: 2017-10-13 15:52:17
     */
    namespace appadmincontroller;
    
    class Index extends Common
    {
    
        /**
         * 后台首页
         */
        public function index(){
           
            return $this->fetch();
        }
    }

    Index继承/Controller/Common类

    创建Common.php文件

    <?php
    
    /**
     * @Author: ZouQH
     * @Date:   2017-10-10 09:41:09
     * @Last Modified by:   ZouQH
     * @Last Modified time: 2017-10-13 16:32:12
     */
    namespace appadmincontroller;
    
    use thinkController;
    
    class Common extends Controller {
        
        protected $user_id;
        protected $user_name;
    
        public function __construct(	hinkRequest $request = null) {
    
            parent::__construct($request);
    
            if (!session('user_id')) {
    
                $this->error('请登陆', 'login/index', '', 0);
            }
    
            $this->user_id = session('user_id');
            $this->user_name = session('user_name');
    
            //权限检查
            if (!$this->_checkAuthor($this->user_id)) {
                $this->error('你无权限操作');
            }
    
        }
    
        /**
         * 权限检查
         */
        private function _checkAuthor($user_id) {
            
            if (!$user_id) {
                return false;
            }
            $perms=model('Permission')->getPermsByUser($user_id);
            // var_dump('common---------------'.$perms);
            session('permission',$perms);//权限
    
            $c = strtolower(request()->controller());
            $a = strtolower(request()->action());
    
            if (preg_match('/^public_/', $a)) {
                return true;
            }
            if ($c == 'index' && $a == 'index') {
                return true;
            }
           
    
            $menu = model('Menu')->getMyMenu($user_id);
            foreach ($menu as $k => $v) {
                if (strtolower($v['c']) == $c && strtolower($v['a']) == $a){
                    return true;
                }
            }
            return false;
        }
    }
  • 相关阅读:
    进程间通讯(四)--剪切板
    进程间通讯(三)--套接字
    进程间通讯(二)--管道
    进程间通讯(一)--邮件槽
    获得目标进程PEB,并获得进程各种信息
    编程实现执行CMD命令-用照片查看器打开图片
    Python网页爬虫之中文乱码
    Python爬虫技术(一)--模拟登陆
    gson的特殊用法
    spring的beans.xml中classpath
  • 原文地址:https://www.cnblogs.com/rainbowz/p/7662076.html
Copyright © 2011-2022 走看看