Это сводит меня с ума в течение нескольких недель: как я могу сделать сеансы доступными на странице 404? Я просто вставляю страницу ошибки 404 в свой шаблон по умолчанию. Он также показывает навигационную панель и нижний колонтитул, но как я могу сохранить свой пользователь во время входа на 404?
На 404 Auth :: check () всегда возвращает значение false, а все остальные – специфические для сеанса значения null или empty.
Как включить сеансы на страницах ошибок (404)?
Что вы можете сделать, внутри app / http / Kernel.php добавить следующий код кода:
\Illuminate\Session\Middleware\StartSession::class, \Illuminate\View\Middleware\ShareErrorsFromSession::class,
Внутри переменной $ middleware. Таким образом, это будет выглядеть так:
protected $middleware = [ \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class, \Illuminate\Session\Middleware\StartSession::class, \Illuminate\View\Middleware\ShareErrorsFromSession::class, ];
Это сработало для меня, я надеюсь, что это сработает и для вас.
Просто чтобы немного расширить существующий ответ: обязательно удалите это промежуточное программное обеспечение из $ 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.php. И поскольку обработка ошибок по умолчанию не перенаправляется на маршрутизированную страницу, у нас не было доступа к сеансу.
Таким образом, промежуточное программное обеспечение будет применяться ко всем страницам, а не только к маршрутизаторам на web.php, включая ошибки.
Я изначально нашел здесь сут, но взял время, чтобы понять, почему это происходит (подумал, что я простудился, все неправильно, не стесняйтесь подтвердить или исправить это, пожалуйста).
Надеюсь, это поможет, он работает для меня на Laravel 5.4