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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 10:41:33