Я получаю проблемы с исключениями CSRF, которые бросают пользователю. Они происходят по совершенно невинным причинам, например, если кто-то слишком долго заполняет форму, когда они, наконец, отправляют ее, истекло, а токены не совпадают. Теперь, очевидно, это ошибка, но ей не нужно убивать все и бросать исключение.
Есть ли способ просто заставить его установить флеш-сообщение и перенаправить обратно на исходную страницу. Я не хочу отключать защиту CSRF. Я просто хочу, чтобы ошибки обрабатывались немного более изящно.
Это немного боль, я обычно добавляю метод в класс VerifyCsrfToken, чтобы поймать TokenMismatchException (в папке Middleware):
public function handle($request, Closure $next) { try { return parent::handle($request, $next); } catch(TokenMismatchException $e) { return redirect()->back()->withInput()->withErrors(['tokenMismatch' => 'Have you been away? Please try submitting the form again!']); } }
Хотя, возможно, вы захотите настроить его в зависимости от того, как вы обрабатываете ошибки в своем приложении.
Это можно обрабатывать в приложении / Handler.php
Измените функцию рендеринга
public function render($request, Exception $e) { return parent::render($request, $e); }
К этому:
public function render($request, Exception $e) { if ($e instanceof \Illuminate\Session\TokenMismatchException){ return redirect($request->fullUrl())->with('error',"Sorry your session has expired please resubmit your request."); } return parent::render($request, $e); }