ThinkPHP6使用中间件实现后台登录验证方案
ThinkPHP6的中间件主要用于拦截或过滤应用的HTTP请求,并进行必要的业务处理。更多的是将业务和一些逻辑做了解耦分离,使整个业务更清楚,不会在一个地方写一大堆代码。比如我们要控制写日志、权限认证、来源判断、白名单、返回Json等都可以写在不同的中间件里面,避免了将这些代码写到一个地方去判断,也可以重复利用代码。所以说,适当用上中间件来写,还是挺爽的。
在TP6中,有好几种不同类型的中间件,像全局中间件、应用中间件、路由中间件、控制器中间件,它们之间的执行顺序也是按上面的来的。更多介绍可以参考官方的文档:https://www.kancloud.cn/manual/thinkphp6_0/1037493
全局中间件
在app/middleware.php定义的中间件。
return [
// Session初始化
\think\middleware\SessionInit::class
];
应用中间件
这个是在应用下面定义的,如我的app目录下面有 api,admin应用,那么在app/api/middleware.php定义
return [
\app\api\middleware\Log::class
];
路由中间件
就是在注册路由时,可以注册中间件,执行这个路由时,执行相对应的中间件。
Route::post('create-order','app\\api\\controller\\order\OrderPay@createOrder')->middleware(app\\middleware\Auth::class);
控制器中间件
在控制器中定义$middleware属性,如示例,当访问index控制时,就会执行中间件
class Index extends FrontController
{
protected $middleware = [ \app\admin\middleware\CheckAdmin::class];
public function index()
{
echo 'test';
}
}
具体使用例子:
这里的例子主要是实现后台验证是否登陆,没有登录就跳到登录页。
1、可以通过命令行指令快速生成中间件,得到对应的文件,路径:app\middleware\CheckAdmin
php think make:middleware CheckAdmin
2、然后目录下的config/app.php文件中的deny_app_list里面要加上middleware,因为不要让外部访问到中间件
3、因判断登录需要用到session,而tp6 默认不开启session 那么在中间件中需要开启session,app目录下的middleware.php 文件 开启session初始化,去掉注释即可
4、之后在刚才建的中间件文件中判断登录与否(记得引入seesion)
5、在后台Base中使用中间件, 这样后台所有的方法都会走中间件判断登陆与否,中间件排查这办法不做验证。
'except' => ['login','login_in']
- ThinkPHP6多应用多语言切换,最佳解决方案
- bignumber.js,javascript前端高精度计算库推荐
- PHP判断网站的访问来源是否是蜘蛛
- PHP中,如果存在继承关系,其中子类和父类都定义了构造函数__construct(),怎么处理?
- 开源免费的CMS内容管理系统,勾股CMS2.0发布
- 推荐收藏7个开源且实用的CSS 框架 / 组件
- 前端报错:was loaded over HTTPS, but requested an insecure错误解决方案
- GitHub 开源了多款字体,支持自定义字重、宽度和倾斜度
- Nginx + PHP 搭建的服务器发现POST数据无法提交或数据被截断的解决方案
- vue微信站history模式微信自定义分享

