首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何处理令牌不匹配异常

如何处理令牌不匹配异常
EN

Stack Overflow用户
提问于 2015-12-16 10:50:17
回答 2查看 2.4K关注 0票数 3

我打开了一张Laravel表格,并把它保存了很长一段时间(5-6小时),或者让我的电脑冬眠。经过很长时间或从hibernate恢复之后,当我提交表单时,它显示了一个TokenMismatchException

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

代码语言:javascript
复制
<input name="_token" type="hidden" value="YLyMGdfLKZESo51SYUHLKAzC6MNRLOQc9D9e2RFq">

我知道存在一些令牌过期问题,但是向客户端显示这样的错误消息是很糟糕的。

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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-16 11:19:49

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

查看一下Laravel5.1错误#渲染-方法,您会发现您可以创建一个自定义Exeption render,检查下面的TokenMismatchException错误示例,该示例将用户重定向到带有自定义消息的索引视图:

代码语言:javascript
复制
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);
}

希望这能有所帮助。

票数 2
EN

Stack Overflow用户

发布于 2015-12-16 11:07:40

我还没有达到Laravel5.1,但在4.2岁时,我使用了这样的方法来处理app/start/global.php中的标记不匹配错误

代码语言:javascript
复制
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...
});

我想这需要对Laravel5.1进行一些修改,但我希望它能帮助你走上正确的轨道!

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34310021

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档