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
相关产品推荐
相关产品推荐

