我遇到向用户抛出CSRF异常的问题。它们完全无辜地发生,例如,如果有人花了太长时间填写表格,当他们最终提交表格时,会话已经过期并且令牌不匹配。现在显然这是一个错误,但它不需要杀死所有内容并抛出异常。
有没有办法让它来代替设置flash消息并重定向回原始页面。我不想禁用CSRF保护我只想更好地处理错误。
答案 0 :(得分:4)
这有点痛苦,我通常会在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!']);
}
}
尽管如此,您可能需要调整一下,具体取决于您在应用中处理错误的方式。
答案 1 :(得分:1)
这可以在app / 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);
}