1、登录、退出
后台
<?php
namespace app\admin\controller;
use think\Controller;
class Login extends Controller
{
public function login(){
//一个方法 处理两个业务逻辑:页面展示 表单提交
if(request()->isPost()){
//post请求 表单提交
//接收参数 username password code
$params = input();
//参数检测 (表单验证)
$rule = [
'username|用户名' => 'require',
'password|密码' => 'require',
'code|验证码' => 'require'
//'code|验证码' => 'require|captcha'
];
$res = $this->validate($params, $rule);
if($res !== true){
$this->error($res);
}
//验证码手动校验
if(!captcha_check($params['code'])){
$this->error('验证码错误');
}
//查询管理员用户表
$password = encrypt_password($params['password']);
$manager = \app\admin\model\Manager::where('username', $params['username'])->where('password', $password)->find();
if($manager){
//登录成功
//设置登录标识到session
session('manager_info', $manager->toArray());
//页面跳转
$this->success('登录成功', 'admin/index/index');
}else{
//用户名或密码错误
$this->error('用户名或密码错误');
}
}else{
//get请求 页面展示
//临时关闭全局模板布局
$this->view->engine->layout(false);
return view();
}
}
//退出
public function logout()
{
//清空session
session(null);
$this->redirect('admin/login/login');
}
}
前台
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>登录</title>
<link href="/static/admin/css/login.css" rel="stylesheet" type="text/css"/>
<style type="text/css">
.login-bg{
background: url(/static/admin/img/login-bg-3.jpg) no-repeat center center fixed;
background-size: 100% 100%;
}
</style>
<script src='/static/admin/js/jquery-3.1.1.min.js'></script>
</head>
<body class="login-bg">
<div class="login-box">
<header>
<h1>后台管理系统</h1>
</header>
<div class="login-main">
<form action="{$Request.url}" class="form" method="post">
<div class="form-item">
<label class="login-icon">
<i></i>
</label>
<input type="text" id='username' name="username" placeholder="这里输入登录名" required>
</div>
<div class="form-item">
<label class="login-icon">
<i></i>
</label>
<input type="password" id="password" name="password" placeholder="这里输入密码">
</div>
<div class="form-item verify">
<label class="login-icon">
<i></i>
</label>
<input type="text" id='verify' class="pull-left" name="code" placeholder="这里输入验证码">
<img class="pull-right" src="{:captcha_src()}" onclick="this.src='{:captcha_src()}?'+ Math.random()">
<div class="clear"></div>
</div>
<div class="form-item">
<button type="button" class="login-btn">
登  录
</button>
</div>
</form>
<div class="msg"></div>
</div>
</div>
<script type="text/javascript">
$(function(){
$('.login-btn').on('click',function(evt){
if($('#username').val() == ''){
$('.msg').html('登录名不能为空');
return;
}
if($('#password').val() == ''){
$('.msg').html('密码不能为空');
return;
}
if($('#verify').val() == ''){
$('.msg').html('验证码不能为空');
return;
}
$('form').submit();
});
});
</script>
</body>
</html>
2、后台页面权限控制(校验是否登录)
主要是通过父类继承 ,父类的构造函数 construct 实现的。每次进controller都会进父类的construct里面。
<?php
namespace app\admin\controller;
use think\Controller;
use think\Request;
class Base extends Controller
{
public function __construct(Request $request)
{
//实现父类的构造函数
parent::__construct($request);
//登录检测
if(!session('?manager_info')){
//没登录
$this->redirect('admin/login/login');
}
}
}
3、增加验证码
建议在配置文件里面增加配置文件,因为默认的非常的不友好。
//验证码配置
'captcha' => [
// 验证码位数
'length' => 4,
// 是否画混淆曲线
'useCurve' => false,
]
前台如何显示和后台如何校验,请看上面的登录