这个问题今天早上才开始发生,我不知道是什么变化导致了它。我已经在网站的顶部导航中实现了一个小的搜索表单,截至上周它工作正常。今天早上,它为每个提交返回"TokenMismatchException"。
通过我的调试器,我可以在csrf过滤器中看到Input::get('_token')
的值确实与Session::token()
的值不同。我还可以查看表单生成的 HTML 源代码,并比较自动生成的隐藏_token
字段的值,并看到它与会话存储中的令牌不同(使用 4.2 的本机文件存储,因此这些文件就在我的 IDE 中)。
无论出于何种原因,生成的_token
的值似乎始终等于上次会话中令牌的值。换句话说,Form::open()
给了我一个会话前过期的令牌。或者在Form::open()
输出令牌后创建新会话。
我已经盯着这个整整2.5个小时了,无法理解可能是什么原因造成的。有什么想法吗?
编辑:添加代码 -
视图:
{{ Form::open(['route' => 'search.customer_job', 'id' => 'customer-job-search-form']) }}
... // a single select field
{{ Form::close() }}
路线:
Route::post('search/customerJobCombined', ['before' => ['csrf', 'auth'], 'as' => 'search.customer_job', 'uses' => 'SearchController@customerJobSearch']);
它从未真正到达控制器,因此我将省略它以避免墙文本。只有一个变量被传递给视图 - 它填充选择选项 - 这是通过视图编辑器完成的 - 这里是:
public function compose($view)
{
$result = $this->command_bus->execute(new GenerateCustomerJobQuickSearchOptionsCommand());
$view->with('customer_job_quick_search_options', $result->options);
}
不过,所有这些都工作得很好。
编辑#2:这是一个非常愚蠢的错误,涉及我几天前添加的一些调试代码(Session::flush()
),并在度假时忘记了。
这是一个涉及旧调试代码的错误。