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

Laravel 11登录时出现Session store not set on request问题求助

解决Laravel Sanctum认证中会话重生成与受保护路由访问的矛盾问题

核心问题原因

你的矛盾来自两个关键点:

  1. 登录路由仅使用api中间件时,Laravel默认不会加载会话相关中间件,导致调用$request->session()->regenerate()触发"Session store not set on request."错误。
  2. 注释掉会话重生成后,会话未正确初始化或更新,Sanctum无法识别有效的会话认证状态,因此访问logout路由时提示未认证。

具体修复步骤

1. 调整路由中间件,确保会话支持

修改bootstrap/app.php中的路由配置,给认证相关路由同时添加web和api中间件——web中间件包含StartSession、EncryptCookies等会话必需的组件:

return Application::configure(basePath: dirname(__DIR__))
    ->withRouting(
        using: function () {
            Route::middleware(['web', 'api'])
                ->prefix('api')
                ->group(function () {
                    require base_path('routes/Api/V1/Auth/routes.php');
                });
        },
        web: __DIR__ . '/../routes/web.php',
        commands: __DIR__ . '/../routes/console.php',
        health: '/up',
    )
    ->withMiddleware(function (Middleware $middleware) {
        $middleware->statefulApi();
    })
    ->withExceptions(function (Exceptions $exceptions) {
        //
    })->create();

2. 简化登录方法,移除冗余代码

Auth::attempt()成功后已经自动完成用户登录,无需重复调用Auth::login(Auth::user()),同时保留会话重生成逻辑:

public function login(object $request)
{
    // 验证用户凭证
    if (!Auth::attempt($request->only(['username', 'password']))) {
        return $this->failedRequest('', 'Invalid email address or password', 400);
    }

    // 重新生成会话,防止会话固定攻击
    $request->session()->regenerate();

    return $this->successfullRequest(Auth::user(), 'User successfully logged in', 200);
}

3. 优化会话Cookie配置(可选但建议)

在.env中添加会话域名配置,确保本地不同端口的服务能共享会话Cookie:

SESSION_DOMAIN=.localhost

4. Postman测试注意事项

发送GET /sanctum/csrf-cookie请求后,务必确保后续的login请求自动携带返回的laravel_session和XSRF-TOKENCookie(Postman默认会自动保存,可在请求的Cookies标签页确认)。

验证效果

完成上述修改后:

  • 登录时$request->session()->regenerate()正常执行,无报错。
  • 登录成功后访问logout路由,Sanctum能正确识别会话认证状态,执行退出逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 02:34:51