2016-11-04 130 views
0

我正在使用Laravel 5.3laravelcollective/html表單助手。TokenMismatchException重新提交表單時

當我提交表單,如果驗證失敗,它需要你回來使用return redirect()->back()->with

然後,如果我重新提交相同的形式,我再次得到一個TokenMismatchException相同的形式,什麼happenned是,CSRF令牌做表單重新加載後未刷新。

我怎樣才能讓令牌刷新?

更新11/07

要打開我使用形式的下:

{!! Form::open(['url'=>'/user/create', 'method'=>'post', 'id'=>'create']) !!} 

自動添加標記字段。

但我也有試過手動添加標記,就像這樣:

{!! Form::open(['url'=>'/user/create', 'method'=>'post', 'id'=>'create']) !!} 
{!! Form::token() !!} 

這裏的令牌實際創建兩次,均是令牌是相同的。

+0

有可能是laravel多種原因未刷新上重定向令牌。你能分享你的表單的代碼片段嗎?你也可以嘗試添加令牌的方式,例如{{Form :: token(); }}而不是將它自己添加爲隱藏的表單字段。讓我知道它是否有幫助。 –

+0

謝謝Shuja,我已經用你的建議更新了這個問題,但問題仍然存在 –

回答

0

問題是我正在發送值_token回到視圖。 我在做什麼:

return redirect() 
->back() 
->with(
['errors' => $validator->errors()->all()] 
+ $request->input() 
); 

凡$請求 - >輸入( '_令牌')沒有被過濾。 相反,我已經改變了它其中工程下面,因爲它並過濾_token:

return redirect() 
->back() 
->withErrors($validator->errors()->all()) 
->withInput($request->input());