只是对现有答案进行一些扩展:确保从 $middlewareGroups 中删除该中间件(如果它也存在的话),这样您就不会两次应用该中间件。
你会得到这样的结果:
protected $middleware = [
\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
\App\Http\Middleware\TrimStrings::class,
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\Session\Middleware\AuthenticateSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
];
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',
],
];
据我了解,这是因为处理会话的中间件,因为位于 web 组中,仅适用于在 web.php 上路由的那些页面。而且由于默认错误处理不会重定向到路由页面,因此我们无法访问会话。
这样中间件将应用于所有页面,而不仅仅是那些在 web.php 上路由的页面,包括错误页面。
我最初找到了here 的解决方案,但我花了一段时间才明白为什么会发生这种情况(我以为我完全搞错了,请随时确认或更正)。
希望它有所帮助,它在 Laravel 5.4 上对我有用