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

相关推荐
zero_face5 分钟前
elk原理简述 - filebeat
大数据·后端
big_eleven6 分钟前
JVM入门基础
java·后端·面试
用户90967830694310 分钟前
python 统计一个字符串中某个字符的出现次数
后端
染落林间色13 分钟前
达梦数据库权限体系详解:系统权限与对象权限
数据库·后端·sql
荔枝爱编程17 分钟前
高性能企业级消息中心架构实现与分享(四):监控运维、扩展性设计
后端·rocketmq
林太白18 分钟前
Rust-搞定图片上传功能
前端·后端·rust
用户30745969820718 分钟前
PHP 类常量详解:从入门到精通
后端·php
荔枝爱编程22 分钟前
高性能企业级消息中心架构实现与分享(五):业务价值、踩坑经验与未来展望
后端·消息队列·rocketmq
用户40993225021223 分钟前
FastAPI后台任务为何能让邮件发送如此丝滑?
后端·github·trae
微笑听雨23 分钟前
全面解读 ConcurrentHashMap:Java 中的高效并发数据结构
java·后端