这个问题刚刚开始在今天早上发生,我不知道是什么改变了它。我已经在我的网站的顶部导航中实现了一个小的搜索表单,截至上周它工作得很好。今天早上,它返回" TokenMismatchException"每次提交。
通过我的调试器,我可以在csrf过滤器中看到Input::get('_token')
的值确实与Session::token()
的值不同。我还可以查看生成的表单HTML源,并比较自动生成的隐藏_token
字段的值,并查看它与会话存储中的令牌不同(使用4.2' s本机文件存储,以便那些文件就在我的IDE中。
看起来,无论出于何种原因,生成的_token
的值始终等于 last 会话中的令牌值。换句话说,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:编辑#2: 这是一个非常愚蠢的错误,涉及一些调试代码(Session::flush()
)我在几天前添加并在度假时忘了。
答案 0 :(得分:0)
这是一个涉及旧调试代码的错误。