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

相关推荐
10x1012 分钟前
# Docker 使用笔记:重新理解镜像、容器与数据持久化
后端
Rover.x13 分钟前
Spring国际化语言切换不生效
java·后端·spring
IT_陈寒26 分钟前
Redis 7个性能优化技巧,让我们的QPS从5k提升到20k+
前端·人工智能·后端
百锦再41 分钟前
金仓数据库提出“三低一平”的迁移理念
开发语言·数据库·后端·python·rust·eclipse·pygame
ZHE|张恒1 小时前
深入理解 Spring 原理:IOC、AOP 与事务管理
java·后端·spring
expect7g1 小时前
Flink-To-Paimon 读取机制
大数据·后端·flink
kida_yuan1 小时前
【从零开始】18. 持续优化模型微调
后端·llm
倚栏听风雨2 小时前
Agent 认知+ReAct模式
后端
申阳2 小时前
Day 5:03. 基于Nuxt开发博客项目-页面结构组织
前端·后端·程序员