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