周大胖子 发表于 2018-8-23 22:37:24

登录以及验证码验证代码

<?php
namespace app\admin\controller;
use think\Controller;
use think\Db;
use think\Request;
use app\admin\model\Admins;
header("Content-type: text/html; charset=utf-8");

class Account extends Controller
{
    public function login()
    {
      return $this->fetch();
    }

    public function dologin(Request $request)
    {
      // 在model之前 进行db直接操作的测试
      // $lma = $request->param();
      // $lmb =Db::table('admins')
      //         ->where([
      //             'username' =>['=',$request->param('username')],
      //             'password' =>['=', MD5($request->param('password'))]
      //         ])
      //          ->find();
      
      // return $lmb? $lma:false;
      
      // $where = ([
      //             'username' =>['=',$request->param('username')],
      //             'password' =>['=', MD5($request->param('password'))],
      //         ]);

      // 非空验证
      if(!$request->param('username')){
            exit( json($code=1,$msg='用户名不能为空'));
      }
      if(!$request->param('password')){
            exit( json($code=1,$msg='密码不能为空'));
      }
      if(!$request->param('vercode')){
            exit( json($code=1,$msg='验证码不能为空'));
      }
      // 验证码验证
      if(!captcha_check( $request->param('vercode'))){
            //验证失败
            exit( json($code=1,$msg='验证码不正确'));
      }

      // 只根据用户名拿数据
      $where = function ($query) use($request){
            $query->where([
                  'username' =>['=',$request->param('username')],
                ]);
      };
      //在这有个坑点 返回值 只能是数组、字符串、不能反回一个对象
      $lmb = admins::get($where);
      
      //登录用户验证
      if(!$lmb){
            exit( json($code=1,$msg='登录失败,该用户不存在'));
      }
      // 登录用户密码验证
      if( MD5($request->param('password')) !== $lmb->getData()['password'] ){
            exit( json($code=1,$msg='登录失败,密码错误'));
      }
      // 判断该用户是否被禁用
      if($lmb->getData()['status']==1){
            exit( json($code=1,$msg='该用户已被管理员禁用'));
      }
      
      // 成功登陆 缓存用户登录信息
      session('admin',$lmb->getData());
      $code =0;
      $msg = '登陆成功等待跳转      return json($code=0,$msg,2,$lmb);
      
    }
    public function ts()
    {
      //value 字段 默认值
      dump(
            Db::table('admins')
            ->where([
                'username'=>['=','admin'],
                'id' =>['=',1]
            ])
            ->find()         //这个find() 只能查询到一条结果
      );
    }
    public function tk()
    {
      $where = function ($query){
            $query->where([
                  'id' =>['=',1],
                  // 'username' =>['=','admin'],
                  // 'id' =>['=',1],
                ]);
      };

      $lmb = admins::get($where);
      dump($lmb->getData()['username']);
    }
}

再贴一个验证码的前端代码代码
login.html【容我精炼一下】
<!DOCTYPE html>
<html>

<head>
<meta charset="utf-8">
<title>登入 - layuiAdmin</title>
<meta name="renderer" content="webkit">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
<link rel="stylesheet" href="__CSS__/layui/css/layui.css?v=6" media="all">
<link rel="stylesheet" href="__CSS__/style/admin.css" media="all">
<link rel="stylesheet" href="__CSS__/style/login.css" media="all">
</head>

<body>

<div class="layadmin-user-login layadmin-user-display-show" id="LAY-user-login" style="display: none;">

    <div class="layadmin-user-login-main">
      <div class="layadmin-user-login-box layadmin-user-login-header">
      <h2>layuiAdmin</h2>
      <p>layui 官方出品的单页面后台管理模板系统e</p>
      </div>
      <div class="layadmin-user-login-box layadmin-user-login-body layui-form">
      <div class="layui-form-item">
          <label class="layadmin-user-login-icon layui-icon layui-icon-username" for="LAY-user-login-username"></label>
          <input type="text" name="username" id="LAY-user-login-username" lay-verify="required" placeholder="用户名" class="layui-input">
      </div>
      <div class="layui-form-item">
          <label class="layadmin-user-login-icon layui-icon layui-icon-password" for="LAY-user-login-password"></label>
          <input type="password" name="password" id="LAY-user-login-password" lay-verify="required" placeholder="密码" class="layui-input">
      </div>
      <div class="layui-form-item">
          <div class="layui-row">
            <div class="layui-col-xs7">
            <label class="layadmin-user-login-icon layui-icon layui-icon-vercode" for="LAY-user-login-vercode"></label>
            <input type="text" name="vercode" id="LAY-user-login-vercode" lay-verify="required" placeholder="图形验证码" class="layui-input">
            </div>
            <div class="layui-col-xs5">
            <div style="margin-left: 10px;">
                <img src="{:captcha_src()}" class="layadmin-user-login-codeimg"onclick="this.src='/admin.php/captcha?id='+Math.random()" id="lm-yz" alt="验证码" title="点击刷新" >
            </div>
            </div>
          </div>
      </div>
      <div class="layui-form-item" style="margin-bottom: 20px;">
          <input type="checkbox" name="remember" lay-skin="primary" title="记住密码">
          <a href="forget.html" class="layadmin-user-jump-change layadmin-link" style="margin-top: 7px;">忘记密码?</a>
      </div>
      <div class="layui-form-item">
          <button class="layui-btn layui-btn-fluid" lay-submit lay-filter="LAY-user-login-submit">登 入</button>
      </div>
      <div class="layui-trans layui-form-item layadmin-user-login-other">
          <label>社交账号登入</label>
          <a href="javascript:;">
            <i class="layui-icon layui-icon-login-qq"></i>
          </a>
          <a href="javascript:;">
            <i class="layui-icon layui-icon-login-wechat"></i>
          </a>
          <a href="javascript:;">
            <i class="layui-icon layui-icon-login-weibo"></i>
          </a>

          <a href="reg.html" class="layadmin-user-jump-change layadmin-link">注册帐号</a>
      </div>
      </div>
    </div>

    <div class="layui-trans layadmin-user-login-footer">

      <p>? 2018
      <a href="http://www.layui.com/" target="_blank">layui.com</a>
      </p>
      <p>
      <span>
          <a href="http://www.layui.com/admin/#get" target="_blank">获取授权</a>
      </span>
      <span>
          <a href="http://www.layui.com/admin/pro/" target="_blank">在线演示</a>
      </span>
      <span>
          <a href="http://www.layui.com/admin/" target="_blank">前往官网</a>
      </span>
      </p>
    </div>

    <!--<div class="ladmin-user-login-theme">
      <script type="text/html" template>
      <ul>
          <li data-theme=""><img src="{{ layui.setter.base }}style/res/bg-none.jpg"></li>
          <li data-theme="#03152A" style="background-color: #03152A;"></li>
          <li data-theme="#2E241B" style="background-color: #2E241B;"></li>
          <li data-theme="#50314F" style="background-color: #50314F;"></li>
          <li data-theme="#344058" style="background-color: #344058;"></li>
          <li data-theme="#20222A" style="background-color: #20222A;"></li>
      </ul>
      </script>
    </div>-->

</div>

<script src="__JS__/layui/layui.js"></script>
<script>
    layui.config({
      base: '__JS__/' //静态资源所在路径
    }).extend({
      index: 'lib/index' //主入口模块
    }).use(['index', 'user'], function () {
      var $ = layui.$
      , setter = layui.setter
      , admin = layui.admin
      , form = layui.form
      , router = layui.router()
      , search = router.search;

      form.render();

      //提交
      form.on('submit(LAY-user-login-submit)', function (obj) {
      $('#lm-yz').click(); //刷新验证码
      console.log(obj.field);

      $.ajax({
          type: "GET",
          url: 'http://www.laomo.com/admin.php/admin/account/dologin',
          dataType: "json",
          data: obj.field,
          type:'post',
          success: function (e) {
            console.log(e)
          },
          error: function (err) {
            console.log(err)
          }
      });

      return false;
      

      });




    });
</script>
</body>

</html>

再表述一下验证码的 实现,
安装完后,在 config/extra/captcha.php 中配置验证码信息; 【注意了 这个文件名是官方要求】
<?php
// <!-- 配置验证码 -->

return [
    // 验证字符集合
    'codeSet'   =>    '56789',
    // 验证码字体大小
    'fontSize'    =>    36,   
    // 验证码位数
    'length'      =>    4,   
    // 关闭验证码杂点
    'useNoise'    =>    false,
];




页: [1]
查看完整版本: 登录以及验证码验证代码