TP6登录

一.登录流程

  1. 正常:登录页面,登录成功跳转到后端页面,登录失败(密码错误or 用户不错在 or …)回到登录页面
  2. 未登录:用户没登录的情况下,跳回登录页面
  3. 已登录:已经登录(再次访问登录页面,sessio等有记录),直接跳转到后端页面
    在这里插入图片描述

二.后端登陆-ajax登录(流程)

js代码

var show_num = [];

layui.use(['form'], function () {

    var form = layui.form,
        layer = layui.layer;
    // 登录过期的时候,跳出ifram框架
    if (top.location != self.location) top.location = self.location;
    // 进行登录操作
    form.on('submit(login)', function (data) {
        data = data.field;
        if (data.username == '') {
             layer.msg('用户名不能为空');
             return false;
        }
        if (data.password == '') {
             layer.msg('密码不能为空');
             return false;
        }

        if (data.captcha == '') {
             layer.msg('验证码不能为空');
             return false;
        }
        
        $(".input-val").val('');
        //url,url,data,type等重要数据
        url ="/admin/login/check";
        $.ajax({
            url,
            data,
            type:"POST",
            success(res){
                if(res.status == 1){
                    layer.msg('登录成功', function () {
                        window.location = '/admin/index/index';
                    });
                }else{
                    layer.msg(res.message);
                    return false;
                }
            }
        })
        return false;
    });
});
$(function(){
    // location.href  =  "http://www.baidu.com";
    draw(show_num);
    $("#canvas").on('click',function(){
        draw(show_num);
    })
})

后台index代码,模拟登录

//模拟登录成功
namespace app\admin\controller;

use app\BaseController;
use think\facade\View;
class Login extends BaseController{
	public function index(){
		return View::fetch();
	}
	
	public function check(){
		return show(config("status.success),"登录成功");
}
}

三,登录逻辑过程如图

在这里插入图片描述

在check()进行参数校验
完成此功能需要在中间件里开启session初始化

在这里插入图片描述

 public function check(){
	//是否为post请求
	if($this->request->isPost()){
		return show(config("status.error"),"请求方式错误");
	}
	   //参数检验,
        $username = $this->request->param("username", "", "trim");
        $password = $this->request->param("password", "", "trim");
        $captcha = $this->request->param("captcha", "", "trim");
        //原生传递的值是否为空
        if (empty($username) || empty($password) || empty($captcha)) {
            return show(config("status.error"), "参数不能为空");
        }
		//判断验证码是否为空
		if(captcha_check($capthcha)){
			return show(config("status.error"), "验证码不正确".$captcha);
		}
		return show(config("status.success"), "登陆成功");
}
获取用户信息
  1. 创建model层
<?php
//model
namespace app\common\model\mysql;
use think\model;
class AdminUser extends Model {
    //根据用户名,获取后端表的数据
    public function getAdminUserByUsername($username){
        if(empty($username)){
            return false;
        }
        $where = [
            "username" => trim($username),
        ];
        $result = $this->where($where)->find();
        return $result;
    }

    //根据主键id更新数据表数据
    public function updateById($id, $data){
        $id = intval($id);
        if(empty($id) || empty($data) || !is_array($data)){
            return false;
        }
        $where = [
            "id" => $id,
        ];
        return $this->where($where)->save($data);
    }
}

需要知道config下面的status.php文件
在这里插入图片描述

//获取model数据
$adminUserObj =new AdminUser();
$adminUser = $adminUserObj->getAdminUserByUsername($username);
//判断在数据库中,该登录用户是否存在
     //判断用户是否存在
            if(empty($adminUser) || $adminUser->status != config("status.mysql.table_normal")){
                return show(config("status.error"), "不存在该用户");
            }
            $adminUser = $adminUser->toArray();

            //判断密码
            if(($adminUser['password']) != md5($password."_singwa_abc")){
                return show(config("status.error"),"密码错误");
            }
		
		//将登陆信息记录到session中
		session("adminUser",$adminuser);

   //要记录表的信息
            $updateData =[
                "last_login_time" =>time(),
                "last_login_ip" =>request()->ip(),
                "update_time" =>time(),
            ];
        //记录信息到mysql表中,$adminUserObj模型里的
            $res = $adminUserObj->updateById($adminUser['id'],$updateData);
            if(empty($res)){
                return show(config("status.error"),'登陆失败');
            }
		return show(config("status.success"), "登陆成功");
    }
用base方式处理登录流(别忘了配置)
  1. 新建立的方法验证登录流
<?php

namespace app\admin\controller;

use app\Basecontroller;
use think\exception\HttpResponseException;
class AdminBase extends BaseController{

	public $adminUser =null;
	public function initialize(){
		parent::initialize();
		//判断是否登陆
		if(empty($this->isLogin())){//判断是否登录切换到中间件中
			return $this->redirect(url("login/index"),302);
		}
		
	}
	//判断是否登录具体方法
	public function isLogin(){
		//获取session数据
		 $this->adminUser = session(config("admin.session_admin"));
		 if(empty($this->adminUser)){
		 	return false;
		 }
		 return true;
	}

	//定义一个新方法,返回后端页面
	public function redirect(...$args){
		throw new HttpResponseException(redirect(...$args));
	}
}
  1. 利用中间件判断登录流
//中间件,Auth文件
<?php
declare (string_type =1);
namespace app\admin\middleware;

class Auth{
	//中间件开始调度
	public function handle($request, \Closure $next){
	    //前置中间件
        if(empty(session(config("admin.session_admin"))) && !preg_match("/login/",$request->pathinfo())){
            return redirect(url((string)"login/index"));
        }

        $response = $next($request);
        //后置中间件,里面的有些方法会被执行,不安全或者没有意义
//        if(empty(session(config("admin.session_admin"))) && $request->controller()!= "Login"){
//                return redirect(url((string)"login/index"));
//        }
		return $next($request);
	}

	public function end(\think\Response $response){

	}
}
validate验证机制
  1. 创建一个validate文件
<?php
namespace app\admin\validate;

use think\Validate;

class AdminUser extends Validate{
    protected $rule = [
      'username' =>'require',
      'password' =>'require',
      'captcha' =>'require|checkCapcha',
    ];

    protected $message =[
        'username' =>'用户必须存在1',
        'password' =>'密码必须存在2',
        'captcha' =>'验证码必须存在3',
    ];

    protected function checkCapcha($value, $url, $data =[]){
        if(!captcha_check($value)){
            return "您输入的验证码不正确啊";
        }
        return true;
    }
}

login.php文件

      //validate验证机制
        $validate = new \app\admin\validate\AdminUser();
        if(!$validate->check($data)){
            return show(config("status.error"),$validate->getError());
        }
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值