2017-01-17 2 views
0

Когда есть несоответствие токена 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">&times;</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(); для обработки входа в систему.

Что мне здесь не хватает?

+0

Просто отладки здесь. Можете ли вы попробовать «redirect() -> back() -> withErrors()» и изменить свой '@if (count ($ errors))' to '@if ($ errors-> any())' и посмотреть, это имеет значение. – EddyTheDove

+0

@EddyTheDove Я действительно сделал 'dd ($ errors)', и это был пустой 'MessageBag'. Я сделал трассировку Xdebug в 'withErrors()', которая показала, что клавише 'errors' присваивается ожидаемое сообщение, но оно не может быть восстановлено позже с сеансом. – eComEvo

ответ

0

я был в состоянии исправить это за счет изменения:

return redirect('/')->withErrors([ 
    'token_mismatch' => trans('auth.token_mismatch', ['domain' => config('session.domain')]) 
]); 

... чтобы:

return redirect()->back()->withErrors([ 
    'token_mismatch' => trans('auth.token_mismatch', ['domain' => config('session.domain')]) 
]); 
Смежные вопросы