如何在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
相关产品推荐
相关产品推荐

