Thinkphp实战(二)——管理员登录与验证

1.创建表结构

打开网页输入localhost:82/phpmyadmin,登录到mysql的图形化管理界面。

创建project数据库,建admin管理员表,表结构如下。

数据库的管理员登录表只简单的设置了id、password、login_count,last_time四个属性。通常密码采用的是md5的32位加密,时间采用时间戳的形式存入。

2.创建管理员模型模型

依旧使用命令行的方式创建模型,命令为:

php think make:model admin/Admin

 3.创建登录控制器

php think make:controller admin/Login

 记得修改控制器继承关系为Base。

并对控制器的一些方法进行一些修改和删除无用的。

地址栏输入localhost:81/admin.php/login/index.html即可访问。

4.实现验证登录

主要的代码内容在login.html页面和控制器Login.php中。

login.html

<!doctype html>
<html lang="en">
{include file='public/header'/}
<body>
    <div class="login-logo"><h1>X-ADMIN V1.1</h1></div>
    <div class="login-box">
        <form id="form1" class="layui-form layui-form-pane">
            <h3>登录你的帐号</h3>
            <label class="login-title" >帐号</label>
            <div class="layui-form-item">
                <label class="layui-form-label login-form"><i class="iconfont">&#xe6b8;</i></label>
                <div class="layui-input-inline login-inline">
                  <input type="text" id="username" name="username" lay-verify="required" placeholder="请输入你的帐号" autocomplete="off" class="layui-input">
                </div>
            </div>
            <label class="login-title" >密码</label>
            <div class="layui-form-item">
                <label class="layui-form-label login-form"><i class="iconfont">&#xe82b;</i></label>
                <div class="layui-input-inline login-inline">
                  <input type="password" id="password" name="password" lay-verify="required" placeholder="请输入你的密码" autocomplete="off" class="layui-input">
                </div>
            </div>
            <div class="form-actions">
                <button id="loginbtn" class="btn btn-warning pull-right"   type="button">登录</button>
                <div class="forgot"><a href="#" class="forgot">忘记帐号或者密码</a></div>     
            </div>
        </form>
    </div>
    <!--背景切换,可删除-->
	<div class="bg-changer">
        <div class="swiper-container changer-list">
            <div class="swiper-wrapper">
                <div class="swiper-slide"><img class="item" src="__STATIC__/images/a.jpg" alt=""></div>
                <div class="swiper-slide"><img class="item" src="__STATIC__/images/b.jpg" alt=""></div>
                <div class="swiper-slide"><img class="item" src="__STATIC__/images/c.jpg" alt=""></div>
                <div class="swiper-slide"><img class="item" src="__STATIC__/images/d.jpg" alt=""></div>
                <div class="swiper-slide"><img class="item" src="__STATIC__/images/e.jpg" alt=""></div>
                <div class="swiper-slide"><img class="item" src="__STATIC__/images/f.jpg" alt=""></div>
                <div class="swiper-slide"><img class="item" src="__STATIC__/images/g.jpg" alt=""></div>
                <div class="swiper-slide"><img class="item" src="__STATIC__/images/h.jpg" alt=""></div>
                <div class="swiper-slide"><img class="item" src="__STATIC__/images/i.jpg" alt=""></div>
                <div class="swiper-slide"><img class="item" src="__STATIC__/images/j.jpg" alt=""></div>
                <div class="swiper-slide"><img class="item" src="__STATIC__/images/k.jpg" alt=""></div>
                <div class="swiper-slide"><span class="reset">初始化</span></div>
            </div>
        </div>
        <div class="bg-out"></div>
        <div id="changer-set"><i class="iconfont">&#xe696;</i></div>   
    </div>
    <script>
        $(function () {
            $("#loginbtn").on('click',function () {
                //表单使用ajax提交
                $.ajax({
                    type:'POST',
                    url:"{:url('login/check')}",//调用login控制器的check方法
                    data:$("#form1").serialize(),//数据来源于表单,并对数据进行序列化,提交表单
                    dataType:'json',//数据类型
                    success:function (data) {
                        if(data.status==1){
                            alert(data.message);
                            window.location.href="{:url('index/index')}";//加载index控制器的index
                        }else {
                            alert(data.message);
                            window.location.href="{:url('login/index')}";//加载login控制器的index
                        }
                    },
                    error:function () {
                        alert("服务器出错!");
                    }
                })
            })
        })
    </script>
</body>
</html>

Login.php

<?php

namespace app\admin\controller;

use app\admin\common\Base;
use think\Model;
use think\Request;
use app\admin\model\Admin;
use think\Session;

class Login extends Base
{
    //渲染用户界面
    public function index()
    {
        $this ->alreadyLogin();
        return $this ->view ->fetch('login');
    }

    //验证用户身份
    public function check(Request $request)
    {
        //设置status的初始值
        $status = 0;

        //获取表单的数据,并保存在变量中
        $data = $request ->param();
        $userName = $data['username'];
        $password = md5($data['password']);
//
//        //在admin表中查询,以用户名为条件
        $map = ['username'=>$userName];
        $admin = Admin::get(['username'=>$userName]);

        //将用户与密码分开验证

        //如果查询到该用户
        if(is_null($admin)){
            //设置返回信息
            $message = "用户名不存在!";
        }elseif ($admin->password != $password){
            //设置密码不正确的返回信息
            $message = "密码不正确!";
        }else{
            //用户名和密码都通过,代表合法用户
            //修改返回信息
            $status = 1;
            $message = "验证通过,请点击确定进入后台!";

            //更新表中登陆次数与最后登录时间
            $admin ->setInc('login_count');
            $admin ->save(['last_time'=>time()]);

            //将用户的登录信息保存到session中,供其他登录器中进行登录判断
            Session::set('user_id',$userName);
            Session::set('user_info',$data);
        }
//        $status = 1;
//        $message = "验证通过,请点击确定进入后台!";
        return ['status'=>$status,'message'=>$message];

    }
    //退出登录
    public function logout(Request $request)
    {
        //删除当前用户session信息
        Session::delete('user_id');
        Session::delete('user_info');

        //执行成功,返回登录页面
        $this ->success('注销成功,正在返回...','login/index');
    }
}

除此之外要注意修改database.php中有关数据库的配置,我足足在这个坑里呆了好久。我打开phpmyadmin的端口号是localhost:82/phpmyadmin,然后在设置的时候就将端口号设为82,一直无法执行Admin::get获取数据表admin中的信息。最后将其端口号改为默认的才执行成功。

注意:phpmyadmin默认的端口号是3306

猜你喜欢

转载自blog.csdn.net/noingw96/article/details/85011197
今日推荐