ThinkPHP6项目基操(14.实战部分 中间件处理登录流程)
中间件处理登录流程
- 一、定义中间件
- 二、前置/后置中间件
- 三、注册中间件
- 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.实战部分 中间件处理登录流程)相关推荐
- php登陆项目,ThinkPHP6项目基操(14.实战部分 中间件处理登录流程)
一.定义中间件 namespace app\middleware; class Check { public function handle($request, \Closure $next) { i ...
- ThinkPHP6项目基操目录
前言 ThinkPHP是一个免费开源的,快速.简单的面向对象的轻量级PHP开发框架,是为了敏捷WEB应用开发和简化企业应用开发而诞生的.ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色 ...
- ThinkPHP6项目基操(15.实战部分 阿里云短信redis)
阿里云短信redis 一.安装阿里云短信SDK 二.封装到项目lib中 三.radis记录验证码 1. 安装redis服务 2. 可视化redis管理软件 3. PHP安装redis扩展 4. 配置缓 ...
- ThinkPHP6项目基操(11.实战部分 部署后台静态页面模板及后台登录页面)
实战部分 部署后台静态页面模板及后台登录页面 前言 一.部署静态资源到项目 1.新建后台静态资源文件夹 二.后台登录页面 1. 目录结构 2. 模板字符串替换配置 前言 网站后台一般是在基础静态页面上 ...
- ThinkPHP6项目基操(13.实战部分 项目中的自定义异常处理总结 错误页面API错误)
项目中的自定义异常处理总结 错误页面&API错误 前言 一.异常分类 1. 控制器找不到 2. 方法找不到 3. 请求资源不存在 4. 系统內部异常.HTTP异常等 二.异常处理 1. 前置处 ...
- ThinkPHP6项目基操(12.实战部分 验证码)
验证码 一.安装验证码 二.模板中使用 三.修改验证码配置 四.自定义验证码 1. 创建 2. 配置 3. 使用 五.验证 TP6 有内置验证码插件,只需简单安装和配置即可使用,而且验证码的验证也非常 ...
- 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 多笔记录 ...
- ThinkPHP6项目基操(19.实战部分 Mysql模型事务操作)
模型事务操作 前言 1. Mysql数据库注意 2. thinkPHP模型使用事务 前言 事务操作在复杂的数据库操作的时候尤为重要,特别是在操作多张表的时候,如果某一步骤出错了,就会导致有脏数据,会很 ...
- ThinkPHP6项目基操(18.实战部分 表单令牌Token 防CSRF)
表单令牌Token 0. 前言 1. TP6 令牌token使用 1.1 表单提交 1.2 AJAX提交 2. TP6 令牌token验证 2.1 路由验证 2.2 控制器验证 2.3 验证器验证 0 ...
最新文章
- 美妙的Python又来了
- java课程实战培训,终获offer
- 计算机领域中信息经转化,统考计算机应用基础06091002真题
- 柯洁:这是我最后一次人机大战 且看且珍惜
- 一道PHP题引出的“短路求值”
- ng-template和对应生成的注释
- Linux环境变量PSI指什么,PSI 文件扩展名: 它是什么以及如何打开它?
- 机器学习如何解决问题
- 部门名称部门结构叠用_金属结构分公司三部门联合开展工会小组活动
- 企业架构规划及服务器优化参数
- c语言从键盘输入求最大值和最小值,从键盘任意输入10个整数,计算并输出最大值和最小值及......
- 父元素没有高度,子元素高度失效
- Gym - 102163M
- php中几个数组函数array_slice() array_filter array_unique() in_array()
- ASP.NET中用healthMonitor属性用法
- UEFI开发与调试---运行阶段介绍
- 计算机学生如何规划好大学四年的学习?
- 【程序员的爱情】彼岸花开谁又种下了执念
- mac pro M1(ARM)安装:ubuntu桌面版虚拟机(五)
- 既然都有了NS,何不再入一个喷喷(Splatoon 2)【上】