Laravel 5.1防止CSRF不匹配引发异常

时间:2015-10-14 09:11:42

标签: php laravel laravel-5 laravel-5.1

我遇到向用户抛出CSRF异常的问题。它们完全无辜地发生,例如,如果有人花了太长时间填写表格,当他们最终提交表格时,会话已经过期并且令牌不匹配。现在显然这是一个错误,但它不需要杀死所有内容并抛出异常。

有没有办法让它来代替设置flash消息并重定向回原始页面。我不想禁用CSRF保护我只想更好地处理错误。

2 个答案:

答案 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);
}