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"></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"></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"></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