中间件处理登录流程

  • 一、定义中间件
  • 二、前置/后置中间件
  • 三、注册中间件
    • 1. 全局中间件
    • 2. 应用中间件
    • 3. 路由中间件
    • 4. 控制器中间件
    • 5. 内置中间件
  • 四、中间件使用 -- 后台登录页面跳转流程
    • 1. 创建Auth中间件
    • 2. 注册应用中间件

一、定义中间件

<?phpnamespace app\middleware;class Check
{public function handle($request, \Closure $next){if ($request->param('name') == 'think') {return redirect('index/think');}return $next($request);}
}

中间件类可以随意命名,中间件的入口执行方法必须是handle方法,而且第一个参数是Request对象,第二个参数是一个闭包

二、前置/后置中间件

中间件是在请求具体的操作之前还是之后执行,完全取决于中间件的定义本身。
下面是一个前置行为的中间件:

<?phpnamespace app\middleware;class Before
{public function handle($request, \Closure $next){// 添加中间件执行代码return $next($request);}
}

下面是一个后置行为的中间件:

<?phpnamespace app\middleware;class After
{public function handle($request, \Closure $next){$response = $next($request);// 添加中间件执行代码return $response;}
}

三、注册中间件

新版的中间件分为全局中间件应用中间件(多应用模式下有效)路由中间件以及控制器中间件四个组。执行顺序分别为:

全局中间件->应用中间件->路由中间件->控制器中间件

1. 全局中间件

全局中间件在app目录下面middleware.php文件中定义,使用下面的方式:

<?phpreturn [\app\middleware\Auth::class
];

中间件的注册应该使用完整的类名,如果已经定义了中间件别名(或者分组)则可以直接使用。全局中间件的执行顺序就是定义顺序。

2. 应用中间件

如果你使用了多应用模式,则支持应用中间件定义,你可以直接在应用目录下面增加middleware.php文件,定义方式和全局中间件定义一样,只是只会在该应用下面生效。

3. 路由中间件

最常用的中间件注册方式是注册路由中间件:

Route::rule('hello/:name','hello')->middleware(\app\middleware\Auth::class);

支持注册多个中间件:

Route::rule('hello/:name','hello')->middleware([\app\middleware\Auth::class, \app\middleware\Check::class]);

4. 控制器中间件

支持为控制器定义中间件,只需要在控制器中定义middleware属性,例如:

<?php
namespace app\controller;class Index
{protected $middleware = ['auth'];public function index(){return 'index';}public function hello(){return 'hello';}
}

当执行index控制器的时候就会调用auth中间件,一样支持使用完整的命名空间定义。

5. 内置中间件

中间件类 描述
think\middleware\AllowCrossDomain 跨域请求支持
think\middleware\CheckRequestCache 请求缓存
think\middleware\LoadLangPack 多语言加载
think\middleware\SessionInit Session 初始化
think\middleware\FormTokenCheck 表单令牌

这些内置中间件默认都没有定义,你可以在应用的middleware.php文件中、路由或者控制器中定义这些中间件,如果不需要使用的话,取消定义即可。

四、中间件使用 – 后台登录页面跳转流程


当访问后台主页的时候,如果已经登录(已记录session)则可以进入注意,否则返回登录页面;若访问后台登录页面,如果已经登录(已记录session)则直接跳转到主页,否则进入登录页面。

1. 创建Auth中间件

admin应用文件夹创建middleware文件夹,创建Auth.php中间件文件:

<?phpnamespace app\admin\middleware;
use think\Response;class Auth
{public function handle($request, \Closure $next){// 前置中间件if(empty(session(config("admin.session_admin"))) && !preg_match("/login/",$request->pathinfo()) ){return redirect(url('login/index'));}if(!empty(session(config("admin.session_admin"))) && preg_match("/login\/index/",$request->pathinfo())){return redirect(url('index/index'));}$response = $next($request);// 后置中间件return $response;}public function end(Response $response){}
}

admin.session_admin是在admin/config文件夹下配置文件定义的:
admin/config/admin.php

<?php
return ['session_admin' => 'adminUser'
];

2. 注册应用中间件

admin应用目录新建middleware.php

<?php
return [\think\middleware\SessionInit::class,app\admin\middleware\Auth::class
];

⭐️重磅推荐:免费商用电商系统

ThinkPHP6项目基操(14.实战部分 中间件处理登录流程)相关推荐

  1. php登陆项目,ThinkPHP6项目基操(14.实战部分 中间件处理登录流程)

    一.定义中间件 namespace app\middleware; class Check { public function handle($request, \Closure $next) { i ...

  2. ThinkPHP6项目基操目录

    前言 ThinkPHP是一个免费开源的,快速.简单的面向对象的轻量级PHP开发框架,是为了敏捷WEB应用开发和简化企业应用开发而诞生的.ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色 ...

  3. ThinkPHP6项目基操(15.实战部分 阿里云短信redis)

    阿里云短信redis 一.安装阿里云短信SDK 二.封装到项目lib中 三.radis记录验证码 1. 安装redis服务 2. 可视化redis管理软件 3. PHP安装redis扩展 4. 配置缓 ...

  4. ThinkPHP6项目基操(11.实战部分 部署后台静态页面模板及后台登录页面)

    实战部分 部署后台静态页面模板及后台登录页面 前言 一.部署静态资源到项目 1.新建后台静态资源文件夹 二.后台登录页面 1. 目录结构 2. 模板字符串替换配置 前言 网站后台一般是在基础静态页面上 ...

  5. ThinkPHP6项目基操(13.实战部分 项目中的自定义异常处理总结 错误页面API错误)

    项目中的自定义异常处理总结 错误页面&API错误 前言 一.异常分类 1. 控制器找不到 2. 方法找不到 3. 请求资源不存在 4. 系统內部异常.HTTP异常等 二.异常处理 1. 前置处 ...

  6. ThinkPHP6项目基操(12.实战部分 验证码)

    验证码 一.安装验证码 二.模板中使用 三.修改验证码配置 四.自定义验证码 1. 创建 2. 配置 3. 使用 五.验证 TP6 有内置验证码插件,只需简单安装和配置即可使用,而且验证码的验证也非常 ...

  7. ThinkPHP6项目基操(20.实战部分 数据库操作返回值总结)

    数据库操作返回值总结 0. 前言 1. Db类操作数据库 1.1 新增 1.2 更新 1.3 删除 1.3.1 单条删除 1.3.2 批量删除 1.4 查询 1.4.1 单笔记录 1.4.2 多笔记录 ...

  8. ThinkPHP6项目基操(19.实战部分 Mysql模型事务操作)

    模型事务操作 前言 1. Mysql数据库注意 2. thinkPHP模型使用事务 前言 事务操作在复杂的数据库操作的时候尤为重要,特别是在操作多张表的时候,如果某一步骤出错了,就会导致有脏数据,会很 ...

  9. ThinkPHP6项目基操(18.实战部分 表单令牌Token 防CSRF)

    表单令牌Token 0. 前言 1. TP6 令牌token使用 1.1 表单提交 1.2 AJAX提交 2. TP6 令牌token验证 2.1 路由验证 2.2 控制器验证 2.3 验证器验证 0 ...

最新文章

  1. 美妙的Python又来了
  2. java课程实战培训,终获offer
  3. 计算机领域中信息经转化,统考计算机应用基础06091002真题
  4. 柯洁:这是我最后一次人机大战 且看且珍惜
  5. 一道PHP题引出的“短路求值”
  6. ng-template和对应生成的注释
  7. Linux环境变量PSI指什么,PSI 文件扩展名: 它是什么以及如何打开它?
  8. 机器学习如何解决问题
  9. 部门名称部门结构叠用_金属结构分公司三部门联合开展工会小组活动
  10. 企业架构规划及服务器优化参数
  11. c语言从键盘输入求最大值和最小值,从键盘任意输入10个整数,计算并输出最大值和最小值及......
  12. 父元素没有高度,子元素高度失效
  13. Gym - 102163M
  14. php中几个数组函数array_slice() array_filter array_unique() in_array()
  15. ASP.NET中用healthMonitor属性用法
  16. UEFI开发与调试---运行阶段介绍
  17. 计算机学生如何规划好大学四年的学习?
  18. 【程序员的爱情】彼岸花开谁又种下了执念
  19. mac pro M1(ARM)安装:ubuntu桌面版虚拟机(五)
  20. 既然都有了NS,何不再入一个喷喷(Splatoon 2)【上】

热门文章

  1. ulua 动态反射在IOS上的问题
  2. Linux的环境变量配置
  3. [UML]UML系列——用例图Use Case
  4. ffmpeg.exe dos下怎么用 放在哪里
  5. Apache开启Gzip压缩设置(转)
  6. java压缩zip文件中文乱码问题
  7. 飞秋官方下载 某些大型企业
  8. 作为一个女程序员,无奈!
  9. 飞鸽推广的由咪商务微博
  10. Java文件操作增强工具