Laravel 5.3
我希望处理TokenMismatchException在VerifyCsrfToken.php。通常情况下,当我没有刷新当前页面,并且之前的令牌仍然存在时,就会出现此异常,因此我重新加载页面,设置新令牌,然后可以进行登录过程。好的,但是,我希望处理异常并自动刷新页面。
这可能吗?
如果您仍然希望在VerifyCsrfToken.php中处理handle TokenMismatchException以下是laravel 5.3的前进方向。在中间件目录
中找到VerifyCsrfToken.php应用程序中间件 Http VerifyCsrfToken.php
一定要加上
使用闭包;
避免声明异常错误。然后添加handle方法来比较sessionToken和表单输入Token。
public function handle($request, Closure $next)
{
if($request->input('_token'))
{
if ( Session::getToken() != $request->input('_token'))
{
notify()->flash('Your session has expired. Please try logging in again.', 'warning');
return redirect()->guest('/login');
}
}
return parent::handle($request, $next);
}
生动的洞察力:完全可选
检查会话令牌是否匹配请求令牌(输入令牌隐藏)
dd(会话:getToken() = = $请求->输入(' _token '));
- 记录会话已过期的错误,这完全是可选的
Log::error("找到过期令牌。"重定向到/");
闪烁错误消息,并重定向响应到登录页面
返回重定向()->客人("/")->with('global', '发现过期令牌')。重定向到/');
注意:
如果这个If语句不为真,返回值(return parent::handle($request, $next);)将被执行这意味着如果令牌有问题,将抛出错误异常 (TokenMismatch异常)。这可能是因为忘记在表单中添加{{csrf_field()}},导致$request->input('_token')找不到或为空。
注意:
我正在使用代码/通知(https://github.com/codecourse/notify)
如果你想在没有包的情况下显示消息,notify()->flash('您的会话已过期。请尝试登入再一次。"、"警告");
是完全可选的。您可以使用laravel实现。比如
返回重定向()->客人("/")->with('global', '发现过期令牌')。重定向到/');