您的当前位置:首页>全部文章>文章详情

ThinkPHP6使用中间件实现后台登录验证方案

发表于:2022-03-08 11:49:38浏览:2599次TAG: #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']