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

相关推荐
canonical_entropy3 小时前
DDD本质论:从哲学到数学,再到工程实践的完整指南之理论篇
后端·低代码·领域驱动设计
后端小张3 小时前
SpringBoot 控制台秒变炫彩特效,秀翻同事指南!
java·后端
it技术3 小时前
Pytorch项目实战 :基于RNN的实现情感分析
pytorch·后端
235164 小时前
【MySQL】MVCC:从核心原理到幻读解决方案
java·数据库·后端·sql·mysql·缓存
YQ_ZJH4 小时前
Spring Boot 如何校验前端传递的参数
前端·spring boot·后端
普罗米修斯5 小时前
C++ 设计模式理论与实战大全【共73课时】
c++·后端
普罗米修斯5 小时前
C++ 设计模式原理与实战大全-架构师必学课程 | 完结
c++·后端
MX_93595 小时前
SpringBoot项目优先级以及bean的管理
java·spring boot·后端·spring
豆浆Whisky5 小时前
Go泛型实战指南:从入门到工程最佳实践|Go语言进阶(12)
后端·go