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

Laravel 8中如何在API路由的控制器中使用Auth门面获取用户信息

解决Laravel 8 API路由中使用Breeze登录后无法获取Auth::user()的问题

我懂你的需求——不想花时间折腾Sanctum的自定义登录逻辑,只想继续用Breeze现成的登录页,同时让API路由里的控制器能正常拿到登录用户。其实不用把路由移去web.php,只需要调整下API路由的中间件配置就行,给你两个简便的方案:

方案一:给单个API路由添加Web中间件

API路由默认用的是无状态的api中间件组,而Breeze的登录是基于Session的(属于web中间件组的处理逻辑)。你只需要给需要获取用户信息的API路由加上web中间件,就能让它支持Session认证:

// routes/api.php
use App\Http\Controllers\CompanyController;
use Illuminate\Support\Facades\Route;

Route::get('team', [CompanyController::class, 'index'])->middleware('web');

配置完成后,这个API路由就会加载Web中间件组里的Session、Cookie相关处理逻辑,Auth::user()就能正常拿到当前登录的用户了。

方案二:全局调整API中间件组(适合多个API路由需要Session的场景)

如果你的大部分API路由都需要获取登录用户,可以直接修改app/Http/Kernel.php里的api中间件组,把Session相关的中间件加进去:

// app/Http/Kernel.php
protected $middlewareGroups = [
    'web' => [
        // ... 保留原有web中间件内容
    ],

    'api' => [
        \Illuminate\Cookie\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
        \Illuminate\Session\Middleware\StartSession::class,
        \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
        'throttle:api',
        \Illuminate\Routing\Middleware\SubstituteBindings::class,
    ],
];

添加后,所有API路由都会默认支持Session认证,你就不用逐个路由加中间件了。

为什么原来的配置不行?

Laravel的api路由默认使用auth:api守卫,这个守卫是基于Token的无状态认证;而Breeze搭建的登录系统用的是web守卫,基于Session。所以直接在API路由里调用Auth::user()时,默认用的是api守卫,自然拿不到Session里的登录用户。

这两个方案都不用改动Breeze的登录页,完全沿用你现有的登录流程,非常省心。

内容的提问来源于stack exchange,提问作者Andre W.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 15:02:35