Laravel 8中Route::filter的替代方案是什么?无需大路由组如何做登录权限控制
解决方案
方案:配置全局Auth中间件排除指定路径
该方案完全不需要调整现有路由结构,也不用把所有路由塞进同一个路由组,仅需两步配置即可实现需求:
- 第一步:将Auth中间件注册为全局中间件
打开app/Http/Kernel.php文件,找到$middleware数组,追加认证中间件:
protected $middleware = [ // 其他原有全局中间件... \App\Http\Middleware\Authenticate::class, ];
- 第二步:配置排除不需要登录的路径
打开app/Http/Middleware/Authenticate.php文件,定义$except属性,填入不需要登录校验的路径:
protected $except = [ '/index', '/login', ];
注意:如果你的路径存在前缀或需要匹配通配符规则,可直接在
$except数组里使用*作为通配符,例如/index/*可匹配所有/index开头的路径。
备选方案:路由组默认追加中间件(不全局注册)
如果不希望把auth中间件注册到全局影响所有请求,可以在路由服务提供者中给web路由默认附加auth中间件:
打开app/Providers/RouteServiceProvider.php,找到web路由的配置部分,修改为:
Route::middleware('web') ->middleware('auth') // 追加这行,给所有web路由默认加auth校验 ->namespace($this->namespace) ->group(base_path('routes/web.php'));
然后在routes/web.php中,给index和login两个路由单独跳过auth校验即可:
Route::get('/index', [IndexController::class, 'index'])->withoutMiddleware('auth'); Route::get('/login', [LoginController::class, 'showLoginForm'])->withoutMiddleware('auth');
内容的提问来源于stack exchange,提问作者Iter Ator
相关产品推荐
相关产品推荐

