Laravel 11控制器构造函数中如何配置方法认证?
Laravel 11 控制器构造函数中配置方法认证的写法
在Laravel 11中,你之前使用的构造函数绑定认证中间件的写法依然可以正常运行,代码无需修改:
public function __construct() { $this->middleware('auth:sanctum')->except(['index', 'show']); }
不过Laravel 11官方更推荐将中间件绑定逻辑移至路由层面,这样能让路由规则更集中,便于后续维护。以下是路由层面的实现方式:
假设你的控制器是App\Http\Controllers\ProductController,在routes/api.php中可以这样配置:
use App\Http\Controllers\ProductController; // 无需认证的公开路由 Route::controller(ProductController::class)->group(function () { Route::get('/products', 'index'); Route::get('/products/{product}', 'show'); }); // 需要Sanctum认证的私有路由 Route::controller(ProductController::class) ->middleware('auth:sanctum') ->group(function () { Route::post('/products', 'store'); Route::put('/products/{product}', 'update'); Route::delete('/products/{product}', 'destroy'); });
或者你也可以用更紧凑的写法,通过except方法批量排除无需认证的路由:
Route::controller(ProductController::class) ->middleware('auth:sanctum') ->except(['index', 'show']) ->group(function () { Route::post('/products', 'store'); Route::put('/products/{product}', 'update'); Route::delete('/products/{product}', 'destroy'); }); // 单独定义公开路由 Route::get('/products', [ProductController::class, 'index']); Route::get('/products/{product}', [ProductController::class, 'show']);
这种路由层面的配置方式,能让你更清晰地看到哪些路由需要认证,哪些是公开访问的,符合Laravel 11推崇的"路由中心化"设计理念。
内容的提问来源于stack exchange,提问作者Bhushan Pagare
相关产品推荐
相关产品推荐

