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

Laravel 12中如何为Folio路由禁用会话与中间件?

解决Laravel 12 + Folio公开页面移除会话/XSRF Cookie问题

你遇到的核心问题是:Folio默认继承了Laravel web路由组的中间件栈,其中包含会话、CSRF相关中间件——即使你在Folio配置里没手动添加中间件,这些默认中间件依然会生效。全局移除这些中间件会导致整个应用依赖会话的功能崩溃,所以需要针对Folio路由单独处理。

方案一:给Folio单独排除不需要的中间件

直接在FolioServiceProvider的boot方法中,用withoutMiddleware排除会话、CSRF相关中间件,不影响其他路由:

public function boot(): void
{
    Folio::path(resource_path('views/pages'))
        ->middleware([
            '*' => [
                // 这里可以添加公开页面需要的中间件(比如CORS),不需要的留空
            ],
        ])
        ->withoutMiddleware([
            \Illuminate\Session\Middleware\StartSession::class,
            \Illuminate\Foundation\Http\Middleware\VerifyCsrfToken::class,
            \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        ])
        ->uri('/');
}

方案二:给Folio注册独立的空中间件组

如果希望Folio完全脱离默认web中间件栈,可以创建一个空的中间件组,让Folio使用它:

  1. 在bootstrap/app.php的withMiddleware中定义空组:
->withMiddleware(function (Middleware $middleware) {
    // 定义一个无任何中间件的组,供公开页面使用
    $middleware->group('public', []);
})
  1. 修改withRouting,指定Folio使用这个空组:
->withRouting(
    commands: __DIR__.'/../routes/console.php',
    web: __DIR__.'/../routes/web.php',
    // 单独配置Folio路由
    folio: [
        'path' => resource_path('views/pages'),
        'middleware' => 'public',
        'uri' => '/',
    ],
    health: '/up',
)

为什么全局移除会报错?

Laravel的web路由组默认绑定了包含会话、CSRF的中间件栈,全局移除这些中间件后,整个应用的所有请求都没有会话上下文。如果有其他路由(比如默认的web路由)或者代码尝试访问会话(比如错误提示里的逻辑),就会抛出Session store not set on request的异常。因此绝对不要全局移除这些核心中间件,只针对不需要的路由单独排除即可。

验证效果

启动应用后,访问Folio的公开页面,查看响应头:如果不再出现laravel_session和XSRF-TOKEN的Cookie,说明配置生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 16:20:54