【发布时间】:2017-04-30 23:53:42
【问题描述】:
有时,当laravel_session cookie 过期而我仍在页面上时,我会登录并收到TokenMismatchException 错误。这是可以理解的。
我想处理这种情况,例如通过向用户显示某种错误并重定向。如果可能的话,我想只为登录请求捕获它。
主要问题是 CSRF 令牌由全局中间件检查,因此在我可以在控制器操作中使用 try-catch 块处理它之前引发错误。
另一个问题是app/Http/Middeware目录下的VerifyCsrfToken.php,长这样:
class VerifyCsrfToken extends BaseVerifier
{
/**
* The URIs that should be excluded from CSRF verification.
*
* @var array
*/
protected $except = [
//
];
}
我看不出如何使用上面的代码来捕获TokenMismatchException。好像我只能排除特定的 URI。
有什么办法可以做到吗?
【问题讨论】:
-
您真的有用户闲置了 N 小时然后想要使用该应用程序吗?然后延长会话时间。
-
如果您发现了 TokenMismatchException,您将自己置于安全风险之中。这没有任何意义。
-
我最好只为登录请求捕获异常,而不是全局捕获异常。此外,延长会话时间对我来说不是解决方案。会话设置为 2 小时,仍有用户存在此问题。
-
然后制作一个中间件,在令牌不匹配发生之前将具有无效会话的用户重定向到登录页面。在登录之前,没有创建会话,因此不会有任何错误。