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

Laravel访问路由时中间件未被调用问题求助

排查Laravel AdminCheck中间件未触发的问题
  • 确认路由中间件注册正确性
    打开app/Http/Kernel.php,检查$routeMiddleware数组里的admin别名是否指向正确的中间件类,注意命名空间和类名拼写:

    protected $routeMiddleware = [
        // 其他系统默认中间件
        'admin' => \App\Http\Middleware\AdminCheck::class,
    ];
    

    不要把注册写到$middleware(全局中间件组)或者$middlewareGroups里,否则无法按路由组的规则生效。

  • 检查路由组的绑定写法
    打开routes/web.php,确保/app前缀的路由组正确绑定了admin中间件,且组内路由没有被外部同名路由覆盖:

    // 正确的路由组写法
    Route::prefix('app')->middleware('admin')->group(function () {
        Route::get('/dashboard', [DashboardController::class, 'index']);
        // 其他/app前缀路由
    });
    

    运行php artisan route:list,查看输出中/app前缀路由的Middleware列,确认是否包含admin,如果没有说明路由绑定存在问题。

  • 验证中间件自身代码
    打开app/Http/Middleware/AdminCheck.php,检查handle方法是否正确实现,必须加入调试代码,且最后返回$next($request):

    public function handle(Request $request, Closure $next)
    {
        // 先加调试代码确认是否触发
        \Log::debug('AdminCheck中间件已触发');
        dd('中间件执行中');
    
        // 你的权限校验逻辑
        if (!auth()->check() || !auth()->user()->is_admin) {
            abort(403, '无访问权限');
        }
    
        return $next($request);
    }
    

    如果调试代码没有输出,说明中间件根本没被调用,回到前面的注册和路由绑定步骤排查。

  • 清除路由缓存
    如果之前执行过php artisan route:cache,修改路由或中间件注册后必须清除缓存,否则系统会使用旧的缓存路由配置:

    php artisan route:clear
    

    清除后再次访问路由测试中间件是否触发。

  • 排查路由冲突
    检查是否存在单独定义的/app前缀路由(不在组内),比如:

    // 这个路由会覆盖组内的同路径路由,且未绑定admin中间件
    Route::get('/app/dashboard', [DashboardController::class, 'index']);
    

    这种情况下访问/app/dashboard会走这个单独路由,跳过中间件,需要删除这类冲突路由。

内容的提问来源于stack exchange,提问作者Lameck Meshack

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 23:20:28