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 验证了。这种方式不仅能保证系统安全,还便于维护。你可以根据自身需求,选择合适的中间件注册方式。

相关推荐
panbook1 小时前
从0到1实现一个分布式时序数据库(三):主从复制、故障检测与切换
后端
上线再说1 小时前
图片从 8.2MB 压到 296KB:我把小程序图片链路的账单拆了一遍
后端
dpharness1 小时前
我原以为 MCP 装完就能用,直到工具列表是空的
后端
dpharness1 小时前
153 个 MCP 服务,我把工具数一个个数了一遍
后端
打工仔折腾 AI4 小时前
Changedetection.io 网页变动监控:Docker 部署、通知配置与公网暴露实践
运维·人工智能·后端·python·docker·容器·性能优化
SomeOtherTime4 小时前
Rust 闭包语法和原理(AI回答)
开发语言·后端·rust
初学AI的小高5 小时前
Agent 工具太多怎么办:BM25 检索、依赖补全与按需加载实战
后端·agent
用户6602676118795 小时前
AI 代码上线前的第 24 道门禁:上线失败时,怎样在 10 分钟内退回?
后端·架构
NishikiAsumi07215 小时前
一次170万行的导出:sql优化远没有加索引这么简单
后端