Laravel 9路由组如何同时配置认证与用户激活双重校验条件
Laravel 路由组新增用户激活状态校验实现方法
你可以通过自定义中间件的方式实现认证+激活状态双层校验,步骤如下:
- 第一步:生成自定义校验中间件
在项目根目录执行artisan命令生成中间件文件:php artisan make:middleware EnsureUserIsActive - 第二步:编写中间件校验逻辑
打开生成的app/Http/Middleware/EnsureUserIsActive.php文件,修改handle方法代码如下:
<?php namespace App\Http\Middleware; use Closure; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; class EnsureUserIsActive { public function handle(Request $request, Closure $next) { // 已认证但账号未激活的用户直接拦截 if (Auth::check() && !Auth::user()->active) { Auth::logout(); // 销毁session避免残留登录状态 $request->session()->invalidate(); $request->session()->regenerateToken(); // 跳回登录页返回错误提示 return redirect('/login')->withErrors([ 'account' => '当前账号未激活,无法访问' ]); } return $next($request); } }
- 第三步:注册中间件
打开app/Http/Kernel.php文件,在$routeMiddleware(部分高版本Laravel叫$middlewareAliases)数组中新增中间件别名:
protected $routeMiddleware = [ // 其他已注册的中间件 'auth' => \App\Http\Middleware\Authenticate::class, // 新增下面这行 'active' => \App\Http\Middleware\EnsureUserIsActive::class, ];
- 第四步:修改路由组配置
注意中间件顺序必须把auth放在active前面,先完成认证拿到用户实例再校验账号状态,否则会触发报错:
Route::middleware(['auth', 'active'])->group(function () { // 你原来的组内路由定义 });
如果后续多个路由组都需要用到「认证+激活校验」的组合,可以直接在Kernel里自定义中间件组,不用每次重复写两个中间件:
protected $middlewareGroups = [ // 其他默认中间件组 'auth.active' => [ \App\Http\Middleware\Authenticate::class, \App\Http\Middleware\EnsureUserIsActive::class, ], ];
之后路由组直接调用这个组合即可:Route::middleware(['auth.active'])->group(function () { // 组内路由定义 });
注意:这套逻辑会自动拦截登录后被设置为未激活的用户,访问受保护路由时会自动清掉登录态跳回登录页,不需要额外修改登录流程的代码。
内容的提问来源于stack exchange,提问作者Jim
相关产品推荐
相关产品推荐

