如何处理令牌不匹配异常

时间:2015-12-16 10:50:18

标签: forms token laravel-5.1

我打开Laravel表格并将其保留很长时间(5/6小时)或者让我的电脑休眠。很长一段时间或在我提交表单后从休眠状态恢复后,它会显示Token Mismatch错误。

我自己没有任何_token字段。但Laravel以各种形式添加了_token字段。它看起来像这样:

<input name="_token" type="hidden" value="YLyMGdfLKZESo51SYUHLKAzC6MNRLOQc9D9e2RFq">

我知道有一些Token到期问题。但是向客户端显示这样的错误消息是不好的。

现在,如果有任何令牌过期问题,我想将我的应用程序重定向到登录页面或主页,或者显示自定义错误消息而不是Laravel Token Mismatch错误。

注意:我不想增加令牌过期时间。

2 个答案:

答案 0 :(得分:2)

  

所有异常都由App \ Exceptions \ Handler类处理

Taka查看 Laravel 5.1 errors#render-method 您会发现可以创建自定义 Exeption render,请查看以下示例,了解TokenMismatchException错误,该错误会重定向用户使用自定义消息索引视图:

public function render($request, Exception $e)
{
    if ($e instanceof \Illuminate\Session\TokenMismatchException) {
        return response()->view('index', ['message' => 'custom message'], 500);
    }
    return parent::render($request, $e);
}

希望这有帮助。

答案 1 :(得分:1)

我还没有进入Laravel 5.1,但是从4.2开始,我使用了类似的东西来处理app/start/global.php中的令牌不匹配错误:

App::error(function(Exception $exception, $code)
{
    // if they get token mismatch, redirect to homepage
    if( strpos($exception->__toString(), 'Illuminate\Session\TokenMismatchException') !== false ){
        return Redirect::route('getHome')->with('notice', Lang::get('messages.sessionExpired'));
    }

    // rest of error handling...
});

我想象这需要对Laravel 5.1进行一些修改,但我希望它可以帮助你走上正轨!

以下是一些可能对您有帮助的链接: