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

Laravel如何让同一路由同时适配auth:api和auth:sanctum中间件

实现方案

方案1:抽取公共路由为闭包复用

将需要共享的路由逻辑封装为独立的闭包变量,分别在两个中间件分组内引入即可,无需重复编写路由定义,也不会改动原有路由的路径、名称和绑定逻辑:

// 定义公共路由闭包
$sharedRoutes = function () {
    Route::post('user/submission-form/validate', [ApiUserSubmissionController::class, 'validateUserSubmissionForm']);
};

// 原有auth:api分组引用
Route::group(['middleware' => ['auth:api']], $sharedRoutes);

// 新增auth:sanctum分组引用
Route::group(['middleware' => ['auth:sanctum']], function() {
    $sharedRoutes();
});

注意:如果两个路由分组没有前缀、域名等差异化配置,相同路径方法的路由会出现后注册覆盖先注册的问题,该场景更推荐使用方案2。

方案2:使用多守卫组合中间件

Laravel的auth中间件原生支持传入多个守卫,会按顺序校验身份,只要任意一个守卫校验通过即可放行,不需要拆分两个路由分组:

// 同时支持auth:api和auth:sanctum校验
Route::group(['middleware' => ['auth:api,sanctum']], function () {
    Route::post('user/submission-form/validate', [ApiUserSubmissionController::class, 'validateUserSubmissionForm']);
});

该方案仅需维护一份路由定义,请求携带符合auth:api规则的密钥或者符合sanctum规则的身份凭证,都可以正常访问该路由。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 13:09:04