laravel 11 Sanctum 多用户授权问题
已完美撒花解决,多亏了老兄的提醒,我自己的问题是 apifox 没有单独配置第二套用户的请求头导致程序识别不到用户信息
auth.php
配置文件不需要额外配置创建 「token」 时区分权限(第二个参数)
创建中间件去验证创建 「token」 时分配的权限,参考文档:Sanctum API 授权
// 大致内容 public function handle(Request $request, Closure $next): Response { if ($request->user()->tokenCan('user')) { return $next($request); } throw new \Illuminate\Auth\AuthenticationException(); }
bootstrap/app.php
为中间件分配别名withMiddleware(function (Middleware $middleware) { $middleware->alias([ 'check.type.user' => CheckUserToken::class, 'check.type.admin' => CheckAdminToken::class, ]); })
路由绑定中间件
/** user */ Route::group([ 'prefix' => 'client', 'middleware' => [ 'auth:sanctum', 'check.type.user' ] ], function () { Route::prefix('auth')->group(function () { Route::post('login', [UserAuthController::class, 'login'])->withoutMiddleware(['auth:sanctum', 'check.type.user']); Route::post('logout', [UserAuthController::class, 'logout']); }); });
/** admin */ Route::group([ 'prefix' => 'admin', 'middleware' => [ 'auth:sanctum', 'check.type.admin', ] ], function () { Route::prefix('auth')->group(function () { Route::post('login', [AdminAuthController::class, 'login'])->withoutMiddleware(['auth:sanctum', 'check.type.admin']); Route::post('logout', [AdminAuthController::class, 'logout']); }); });
推荐文章: