Когда есть несоответствие токена CSRF, я пытаюсь перенаправить обратно в форму для входа с полезным сообщением. Чтобы сделать это, я добавил следующее Exceptions\Handler
:Вспышка сессии Laravel не работает для маршрутов auth
public function render($request, Exception $exception)
{
if ($exception instanceof TokenMismatchException) {
return redirect('/')->withErrors([
'token_mismatch' => trans('auth.token_mismatch')
]);
}
return parent::render($request, $exception);
}
Однако сообщение никогда не делает его к $errors
переменной в представлении:
@if (count($errors))
<div class="alert alert-danger alert-dismissable margin5">
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
{{ $errors->first() }}
</div>
@endif
Мои Http\Kernel
выглядит хорошо, насколько я могу сказать:
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
];
Мой web.php
файл содержит Laravel 5.3 по умолчанию Auth::routes();
для обработки входа в систему.
Что мне здесь не хватает?
Просто отладки здесь. Можете ли вы попробовать «redirect() -> back() -> withErrors()» и изменить свой '@if (count ($ errors))' to '@if ($ errors-> any())' и посмотреть, это имеет значение. – EddyTheDove
@EddyTheDove Я действительно сделал 'dd ($ errors)', и это был пустой 'MessageBag'. Я сделал трассировку Xdebug в 'withErrors()', которая показала, что клавише 'errors' присваивается ожидаемое сообщение, но оно не может быть восстановлено позже с сеансом. – eComEvo