【发布时间】:2017-10-07 13:26:07
【问题描述】:
我试图在 Laravel 的 Handler.php 中捕获 TokenMismatchException
当我通过临时从表单中删除令牌来模仿 csrf 令牌异常时,我网站的本地开发版本会显示:
TokenMismatchException in VerifyCsrfToken.php line 68:
但是当我更改 Handler.php 中的 render() 函数来查找异常并处理错误时,它就不起作用了。例如,如果我用下面的代码替换默认代码进行测试,并从表单中获取 csrf 令牌,系统会返回我的“这不是令牌问题”消息,而不是“令牌问题”消息。
public function render($request, Exception $exception)
{
if($exception instanceof TokenMismatchException) {
return('token problem');
}else{
return('this was not a token problem');
}
return parent::render($request, $exception);
}
因此,使用默认代码 Laravel 似乎可以识别 TokenMismatchException,但使用我上面的简单测试代码,它不会。你能解释一下这里发生了什么吗?
【问题讨论】:
-
根据DisgruntledGoat 对this answer 的评论,你在类定义之前有
use Illuminate\Session\TokenMismatchException;吗? -
我在搜索过程中看到了 DisgruntledGoat 的答案,但没有实现它,所以它不在当前代码中。现在,通过重新包含 use 语句并按照 Ian 的建议实现 http 响应,我终于可以捕获异常并重定向到另一个页面,告诉用户再试一次,或者我决定什么。这是我使用 Laravel 创建的第一个网站 - 这是来自 CodeIgniter 的学习曲线!
标签: php laravel exception-handling