2016-12-15 129 views
0

有时候,当laravel_session Cookie过期并且我仍在页面上时,我将登录并获取TokenMismatchException错误。这是可以理解的。Catch TokenMismatchException

我想处理这种情况,例如,通过向用户显示某种错误并重定向。如果可能的话,我想只为登录请求捕获它。

主要问题是CSRF令牌由全局中间件检查,因此在我可以在控制器操作中使用try-catch块来处理它之前会抛出错误。

的另一个问题是,VerifyCsrfToken.phpapp/Http/Middeware目录,它看起来像这样:

​​

我不看我怎么可以用上面的代码来捕获TokenMismatchException。好像我只能排除特定的URI。

有什么办法可以做到吗?

+0

你真的有用户闲置了N个小时,然后谁想要使用的应用程序?然后延长会话时间。 –

+0

如果您发现了TokenMismatchException,那么您将面临安全风险。这个不成立。 –

+0

我最好只为登录请求捕获异常,而不是全局。另外,延长会话时间对我来说不是一个解决方案。会话设置为2小时,并且仍有用户仍然存在此问题。 – lesssugar

回答

2

转到应用程序\例外\ Handler.php并测试它像这样:

//Add this to render() method: 

if ($exception instanceof TokenMismatchException) { 
    return $this->handleTokenMismatchException($exception); 
} 

// then... 

protected function handleTokenMismatchException(TokenMismatchException $exception) { 

    // What you gonna do about it e.g. return redirect('/somewhere'); 

} 
+0

正如它所指出的,它显然是来自我身边的重复,但答案是有效的。谢谢! – lesssugar

相关问题