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

Laravel中如何判断当前请求所使用的认证Guard?

如何检查当前请求对应的Guard

在你的场景里,同一浏览器同时登录了web和admin Guard,且两者的check()都返回true,要确定当前请求对应的Guard,最直接靠谱的方法是利用Laravel Auth中间件的内置行为:

当你通过auth或auth:admin中间件完成认证后,Laravel会自动调用shouldUse()方法,把当前请求上下文的默认Guard设置为该中间件指定的Guard。这时你只需要一行代码就能拿到当前请求对应的Guard:

$currentGuard = Auth::getDefaultDriver();

为什么这个方法有效?

Laravel自带的Authenticate中间件(就是我们常用的auth中间件)在认证成功时,会执行$this->auth->shouldUse($guard)——这个操作会把当前请求的默认Guard切换为中间件指定的那个(比如admin),而不是全局配置的默认Guard。所以哪怕你全局默认Guard是web,只要当前请求是通过auth:admin中间件认证的,Auth::getDefaultDriver()就会返回admin。

实际验证示例

假设你的路由是这么配置的:

// 前台用户路由,用默认auth中间件(对应web Guard)
Route::middleware('auth')->group(function () {
    Route::get('/user/dashboard', function () {
        dd(Auth::getDefaultDriver()); // 输出 'web'
    });
});

// 管理员后台路由,用auth:admin中间件
Route::middleware('auth:admin')->prefix('admin')->group(function () {
    Route::get('/dashboard', function () {
        dd(Auth::getDefaultDriver()); // 输出 'admin'
    });
});

当你同时登录用户和管理员后,访问前台仪表盘会返回web,访问后台仪表盘会返回admin,完全匹配当前请求对应的Guard。

补充:未经过认证的请求怎么办?

如果请求没走auth中间件(比如公共页面),Auth::getDefaultDriver()会返回auth.php配置文件里defaults.guard的值(一般是web)。要是需要区分这种未认证的情况,可以结合Auth::check()判断:

if (Auth::check()) {
    $currentGuard = Auth::getDefaultDriver();
} else {
    // 当前请求未经过认证,没有对应的Guard
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:44:21