TP6使用中间件为后台管理页面添加统一Session 验证

在 ThinkPHP 6(TP6)里,若要给后台管理页面统一添加 Session 验证,可通过中间件来达成。下面为你详细介绍具体的实现步骤:

1. 生成中间件

你可以借助命令行来生成一个中间件:

bash 复制代码
php think make:middleware AdminAuth

2. 编写中间件代码

生成的中间件文件位于app/middleware/AdminAuth.php,你需要对其进行编辑,添加 Session 验证逻辑。以下是示例代码:

php 复制代码
<?php
namespace app\middleware;

class AdminAuth
{
    public function handle($request, \Closure $next)
    {
        // 检查用户是否登录
        if (!session('?admin_id')) {
            // 如果未登录,重定向到登录页面
            return redirect(url('admin/login/index'));
        }
        
        // 已登录,继续请求
        return $next($request);
    }
}

3. 注册中间件

你可以在全局中间件、路由中间件或者控制器中间件中注册该中间件。下面为你介绍不同的注册方式:

全局中间件注册

在app/middleware.php文件中注册中间件,这样所有请求都会经过 Session 验证:

php 复制代码
return [
    \app\middleware\AdminAuth::class,
];

路由中间件注册

在app/route/route.php文件中注册中间件,只对后台路由生效:

php 复制代码
use think\facade\Route;

// 定义后台路由组
Route::group('admin', function () {
    // 后台路由...
})->middleware(\app\middleware\AdminAuth::class);

控制器中间件注册

在控制器中注册中间件,仅对该控制器的方法生效:

php 复制代码
<?php
namespace app\controller\admin;

use think\Controller;
use app\middleware\AdminAuth;

class Base extends Controller
{
    protected $middleware = [AdminAuth::class];
}

4. 登录处理

在用户登录成功时,你需要设置 Session:

php 复制代码
<?php
namespace app\controller\admin;

use think\facade\Session;

class Login extends Base
{
    public function login()
    {
        // 验证用户登录信息...
        
        // 登录成功,设置Session
        Session::set('admin_id', $userInfo['id']);
        Session::set('admin_name', $userInfo['username']);
        
        return redirect(url('admin/index/index'));
    }
}

5. 退出登录

提供退出登录的功能,清除 Session:

php 复制代码
<?php
namespace app\controller\admin;

use think\facade\Session;

class Index extends Base
{
    public function logout()
    {
        // 清除Session
        Session::delete('admin_id');
        Session::delete('admin_name');
        
        return redirect(url('admin/login/index'));
    }
}

总结

通过上述步骤,你就能在 TP6 的后台管理页面实现统一的 Session 验证了。这种方式不仅能保证系统安全,还便于维护。你可以根据自身需求,选择合适的中间件注册方式。

相关推荐
合尘猫3 分钟前
Nginx stream 做 GitHub 443 SNI 透传:完整配置、多上游故障转移与三个坑
后端·程序员·开源
知守观7 分钟前
百万级数据导出OOM:POI的坑与EasyExcel的流式写入实战(附内存对比)
java·后端
蜗牛互联网29 分钟前
Computer Use公共预览的安全设计:应用、动作与数据三维门禁
java·人工智能·后端·安全·策略模式
YYYing.40 分钟前
【设计模式系列 (八) 】组合模式
c++·后端·设计模式·组合模式·c/c++
IT_陈寒1 小时前
Redis集群切换主节点时,服务竟然全员掉线
前端·人工智能·后端
打工仔折腾 AI1 小时前
多台服务器日志分散难查?用Promtail+Loki+Grafana搭建集中检索平台
服务器·人工智能·后端·python·性能优化·django·grafana
打工仔折腾 AI1 小时前
DiPlay 实测:iPhone 绕过硬件盒子直连 BYD 车机的思路拆解
android·人工智能·后端·python·gradle·iphone·ai agent 实战
打工仔折腾 AI12 小时前
工业场景下时序库与实时计算一体化架构选型实践对比
java·开发语言·后端·python·性能优化·架构·ai agent 实战
蜗牛互联网13 小时前
长任务多Agent共享文件系统的Manifest交接模式
java·人工智能·后端
苏supper14 小时前
Spring Boot多环境配置与打包运行
spring boot·后端·spring