Laravel TokenMismatchException VerifyCsrfToken.php:67查找路线

时间:2018-07-27 10:09:50

标签: php laravel

我已经检查了我网站的laravel.log,有几个错误,我想修复。最常见的错误是“ TokenMismatchException VerifyCsrfToken.php:67”

很遗憾,我无法找出这些错误的来源。我的网站上有很多表格,所以我尝试在发生错误时跟踪网址,但是使用此代码,它不起作用:

\Log::info('TokenMismatch: '.\Route::currentRouteName());

您能帮我如何找到出现这些错误的页面吗?

多谢指教!

4 个答案:

答案 0 :(得分:1)

您的App\Exceptions\Handler中有一个字段:

protected $dontReport = [
   // etc
   TokenMismatchException::class
   // etc
];

如果要报告TokenMismatcheException,则需要删除该行。

如果您还想在报告中添加自定义逻辑,则可以执行以下操作:

public function report(Exception $exception) {
    if ($exception instanceof TokenMismatchException) {
        \Log::info($exeption->getMessage, [ "Current URL: ".url()->current(), $e->getTraceAsString() ]); //Trace is optional but helps
    } else {
         parent::report($exception);
    }
}

但是,默认情况下未报告TokenMismatchException的原因是它会在错误日志中引起很多干扰。爬虫(无论是否恶意)在其日常工作中都会不断触发此类错误,因为有时这就是它们的工作方式。

答案 1 :(得分:1)

我得到了相同的错误消息,然后发现我错过了为表单字段添加csrf_token的问题。

<form action="" class="form-horizontal"  method="post" id="myform" name="distributor_form">
    {{ csrf_field() }}
</form>

答案 2 :(得分:0)

将此标签添加到表单中

<input type="hidden" name="_token" value="{{ csrf_token() }}">

答案 3 :(得分:0)

或者在csrf_field()开头标记之后使用form,如下例所示:

<form method="POST" action="...">
{{ csrf_field() }}
...
</form>