You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.06 08:46:07