Laravel中如何使用自定义Guard并规避默认Guard?
问题解决步骤
1. 修正config/auth.php配置错误
你的admins提供者配置存在语法错误,同时调整默认Guard并保留api Guard避免报错:
'defaults' => [ 'guard' => 'web', // 将默认Guard改为web,避免默认调用api 'passwords' => 'users', ], 'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'admin' => [ 'driver' => 'jwt', 'provider' => 'admins', ], 'api' => [ // 暂时保留api Guard,避免系统报错 'driver' => 'jwt', 'provider' => 'users', ], ], 'providers' => [ 'users' => [ 'driver' => 'eloquent', 'model' => App\Models\User::class, ], 'admins' => [ 'driver' => 'eloquent', 'model' => App\Models\Admin::class, // 这里之前错误写为provider,修正为model ], ],
2. 正确调用Admin Guard生成Token
你之前的JWTAuth::attempt传参方式错误,第二个参数是"记住用户"的开关,不是指定Guard的参数。要明确指定Guard实例:
// 方式一:使用Laravel auth门面指定Guard $adminGuard = auth()->guard('admin'); if (! $token = $adminGuard->attempt($credentials)) { return response()->json(['error' => 'invalid_credentials'], 400); } // 方式二:直接用JWTAuth指定Guard if (! $token = JWTAuth::guard('admin')->attempt($credentials)) { return response()->json(['error' => 'invalid_credentials'], 400); }
3. 彻底移除api Guard(可选)
如果想完全删除api Guard,需要先排查项目中所有引用api Guard的地方:
- 路由文件中的
middleware:auth:api - 代码中直接调用
auth('api')的逻辑 - 配置文件中其他引用api Guard的位置
把这些地方替换为web或admin后,就可以删除guards里的api配置项。
4. 清除配置缓存
修改配置后执行命令,确保新配置生效:
php artisan config:clear
内容的提问来源于stack exchange,提问作者enamul haque
相关产品推荐
相关产品推荐

