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

如何在Laravel中仅为Nova后台保留cookie会话功能

实现思路

Nova后台默认依赖web中间件组提供的会话、Cookie、CSRF校验能力,直接全局注释web组的相关中间件会导致Nova运行时缺少必要依赖抛出500错误。正确做法是保留web中间件组的原有配置,单独为公网前端路由分配无会话Cookie的中间件组。

具体操作步骤

  • 第一步:恢复app/Http/Kernel.php中web中间件组的原有配置,同时新增公网前端专用中间件组:
protected $middlewareGroups = [
        'web' => [
           \App\Http\Middleware\EncryptCookies::class,
           \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
           \Illuminate\Session\Middleware\StartSession::class,
           \Illuminate\Session\Middleware\AuthenticateSession::class,
           \Illuminate\View\Middleware\ShareErrorsFromSession::class,
           \App\Http\Middleware\VerifyCsrfToken::class,
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
        ],

        'api' => [
            'throttle:60,1',
            'bindings',
        ],
    
        // 新增公网前端专用中间件组,无会话、Cookie、CSRF相关逻辑
        'public_front' => [
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
        ]
    ];
  • 第二步:修改路由配置,将所有公网前端路由划入public_front中间件组,Nova相关路由保持默认走web中间件组即可。示例配置(routes/web.php):
// 公网前端路由,不会加载会话、Cookie相关逻辑
Route::middleware('public_front')->group(function () {
    // 在此处写入所有公网前端的路由规则
    Route::get('/', [HomeController::class, 'index']);
    Route::get('/article/{id}', [ArticleController::class, 'detail']);
});

// 此处之外的路由(包括Nova自动注册的后台路由)默认走web中间件组,保留Cookie、会话功能

可选替代方案

如果不想调整路由分组,也可以在对应中间件中添加公网路径排除规则:

  • 在VerifyCsrfToken中间件的$except属性中添加所有公网前端路径,跳过CSRF校验
  • 在StartSession中间件中判断请求路径如果属于公网前端则不启动会话
    该方案维护成本更高,更推荐使用路由分组的方案实现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 15:27:03