Laravel 5.3
我希望在VerifyCsrfToken.php中处理TokenMismatchException。 通常,当我没有刷新当前页面并且前一个令牌持续存在时会发生此异常,因此我重新加载页面,设置了新令牌并且我可以执行登录过程。 好的,但是,我希望处理异常并自动刷新页面。
这可能吗?
答案 0 :(得分:2)
如果您仍希望在VerifyCsrfToken.php中处理Handle TokenMismatchException 这是laravel 5.3的前进方向。 在中间件目录中找到 VerifyCsrfToken.php
应用\ HTTP \中间件\ VerifyCsrfToken.php
确保添加,
使用Closure;
避免声明异常错误。 然后添加handle方法来比较sessionToken和表单输入令牌。
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(\ Session :: getToken()== $ request-> input(' _token'));
\ Log :: error("找到过期的令牌。重定向到/");
使用重定向响应登录页面
返回redirect() - >来宾(' /') - > with(' global','找到过期的令牌。重定向到/');
请注意:
如果此if语句不为true,则返回值(返回parent :: handle($ request,$ next);)将被执行 这意味着如果令牌出现问题,将抛出错误异常( TokenMismatch 异常)。这可能是因为忘记在表单中添加 {{csrf_field()}} ,因此 $ request-&gt;输入(&#39; _token&#39;)< / strong>无法找到或为空。
注意:
使用codecourse / notify(https://github.com/codecourse/notify) 闪烁消息,这就是我使用的原因,
notify() - &gt; flash(&#39;您的会话已过期。请尝试登录 再次。&#39;,&#39;警告&#39;);
如果您想在没有包的情况下刷新消息,那么它是完全可选的。 你可以使用laravel implimentation。所以它会像
返回redirect() - &gt;来宾(&#39; /&#39;) - &gt; with(&#39; global&#39;,&#39;找到过期的令牌。重定向到/&#39;);