如何为Resource Controller除show方法外的所有方法添加Auth认证
解决方案
要实现为Resource Controller的所有方法添加Auth认证但排除show方法的需求,你可以通过以下两种方式调整路由配置:
方法一:拆分路由(更直观)
将show方法单独定义为公开路由,其余资源路由保留在认证中间件组内,并排除show方法:
Route::get('/', function () { return view('welcome'); }); // 公开访问的show路由 Route::get('pdfs/{pdf}', [PdfController::class, 'show'])->name('pdfs.show'); // 受认证保护的其余资源路由 Route::middleware([ 'auth:sanctum', config('jetstream.auth_session'), 'verified' ])->group(function () { Route::resource('pdfs', PdfController::class)->except(['show']); });
方法二:直接在资源路由上指定中间件排除规则
通过链式调用middleware方法并传入except参数,一次性配置资源路由的认证规则:
Route::get('/', function () { return view('welcome'); }); Route::resource('pdfs', PdfController::class) ->middleware([ 'auth:sanctum', config('jetstream.auth_session'), 'verified' ], ['except' => 'show']);
说明
- 两种方式都能实现
show方法无需认证即可访问,其余方法(如create、store、edit、update、destroy)必须通过认证才能访问。 - 方法一中显式定义
show路由并指定名称,确保route('pdfs.show')等路由生成函数能正常工作。
内容的提问来源于stack exchange,提问作者El Hussien Ramadan
相关产品推荐
相关产品推荐

