1、登录、退出

后台

  1. <?php
  2. namespace app\admin\controller;
  3. use think\Controller;
  4. class Login extends Controller
  5. {
  6. public function login(){
  7. //一个方法 处理两个业务逻辑:页面展示 表单提交
  8. if(request()->isPost()){
  9. //post请求 表单提交
  10. //接收参数 username password code
  11. $params = input();
  12. //参数检测 (表单验证)
  13. $rule = [
  14. 'username|用户名' => 'require',
  15. 'password|密码' => 'require',
  16. 'code|验证码' => 'require'
  17. //'code|验证码' => 'require|captcha'
  18. ];
  19. $res = $this->validate($params, $rule);
  20. if($res !== true){
  21. $this->error($res);
  22. }
  23. //验证码手动校验
  24. if(!captcha_check($params['code'])){
  25. $this->error('验证码错误');
  26. }
  27. //查询管理员用户表
  28. $password = encrypt_password($params['password']);
  29. $manager = \app\admin\model\Manager::where('username', $params['username'])->where('password', $password)->find();
  30. if($manager){
  31. //登录成功
  32. //设置登录标识到session
  33. session('manager_info', $manager->toArray());
  34. //页面跳转
  35. $this->success('登录成功', 'admin/index/index');
  36. }else{
  37. //用户名或密码错误
  38. $this->error('用户名或密码错误');
  39. }
  40. }else{
  41. //get请求 页面展示
  42. //临时关闭全局模板布局
  43. $this->view->engine->layout(false);
  44. return view();
  45. }
  46. }
  47. //退出
  48. public function logout()
  49. {
  50. //清空session
  51. session(null);
  52. $this->redirect('admin/login/login');
  53. }
  54. }

前台

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title>登录</title>
  6. <link href="/static/admin/css/login.css" rel="stylesheet" type="text/css"/>
  7. <style type="text/css">
  8. .login-bg{
  9. background: url(/static/admin/img/login-bg-3.jpg) no-repeat center center fixed;
  10. background-size: 100% 100%;
  11. }
  12. </style>
  13. <script src='/static/admin/js/jquery-3.1.1.min.js'></script>
  14. </head>
  15. <body class="login-bg">
  16. <div class="login-box">
  17. <header>
  18. <h1>后台管理系统</h1>
  19. </header>
  20. <div class="login-main">
  21. <form action="{$Request.url}" class="form" method="post">
  22. <div class="form-item">
  23. <label class="login-icon">
  24. <i></i>
  25. </label>
  26. <input type="text" id='username' name="username" placeholder="这里输入登录名" required>
  27. </div>
  28. <div class="form-item">
  29. <label class="login-icon">
  30. <i></i>
  31. </label>
  32. <input type="password" id="password" name="password" placeholder="这里输入密码">
  33. </div>
  34. <div class="form-item verify">
  35. <label class="login-icon">
  36. <i></i>
  37. </label>
  38. <input type="text" id='verify' class="pull-left" name="code" placeholder="这里输入验证码">
  39. <img class="pull-right" src="{:captcha_src()}" onclick="this.src='{:captcha_src()}?'+ Math.random()">
  40. <div class="clear"></div>
  41. </div>
  42. <div class="form-item">
  43. <button type="button" class="login-btn">
  44. 登&emsp;&emsp;录
  45. </button>
  46. </div>
  47. </form>
  48. <div class="msg"></div>
  49. </div>
  50. </div>
  51. <script type="text/javascript">
  52. $(function(){
  53. $('.login-btn').on('click',function(evt){
  54. if($('#username').val() == ''){
  55. $('.msg').html('登录名不能为空');
  56. return;
  57. }
  58. if($('#password').val() == ''){
  59. $('.msg').html('密码不能为空');
  60. return;
  61. }
  62. if($('#verify').val() == ''){
  63. $('.msg').html('验证码不能为空');
  64. return;
  65. }
  66. $('form').submit();
  67. });
  68. });
  69. </script>
  70. </body>
  71. </html>

2、后台页面权限控制(校验是否登录)

主要是通过父类继承 ,父类的构造函数 construct 实现的。每次进controller都会进父类的construct里面。

  1. <?php
  2. namespace app\admin\controller;
  3. use think\Controller;
  4. use think\Request;
  5. class Base extends Controller
  6. {
  7. public function __construct(Request $request)
  8. {
  9. //实现父类的构造函数
  10. parent::__construct($request);
  11. //登录检测
  12. if(!session('?manager_info')){
  13. //没登录
  14. $this->redirect('admin/login/login');
  15. }
  16. }
  17. }

3、增加验证码

建议在配置文件里面增加配置文件,因为默认的非常的不友好。
image.png

  1. //验证码配置
  2. 'captcha' => [
  3. // 验证码位数
  4. 'length' => 4,
  5. // 是否画混淆曲线
  6. 'useCurve' => false,
  7. ]

前台如何显示和后台如何校验,请看上面的登录