2017-07-24 73 views
1

在laravel 5.3中,我可以提交表單從我的項目時,我登錄管理員,但是當我從管理員註銷和提交相同的表單,而不刷新頁面我得到a TokenMismatchException在laravel 5.3當我從管理員註銷我得到了「TokenMismatchException」

我的路線:

Route::group(['prefix' => 'admin', 'middleware' => ['backend']], function() 
{ 
    Route::get('logout', 'Auth\[email protected]')->name('user.logout'); 
}); 

我的表格:

{!! Form::open(['route' => ['contactus.store'], 'method'=> 'POST', 'id' => 'contact_us_form']) !!} 

    <?php echo Form::text('name', NULL, ['placeholder' => 'name', 'class' => 'form-control', 'id' => 'name']); ?> 

{!! Form::close() !!} 
+0

的可能的複製[?什麼是解決laravel令牌不匹配錯誤的正確方法(https://開頭計算器。 com/questions/45223087/what-is-the-way-to-resolve-token-mismatch-error-in-laravel) –

+1

什麼是中間件「後端」? – erashdan

回答

-1

你應該添加

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

您註銷表單

+0

這是沒有必要的,因爲HTML表單生成器'Form :: open()'會爲你做這件 – morph

+0

我沒有註銷表單,這是一個get操作。 – Rana

0

令牌是有專門阻止你發佈同樣的形式TWICE。 如果您不想要這種行爲,請從窗體中刪除CSRF令牌。

+0

我打開兩個標籤,當我從標籤註銷我的令牌將被銷燬,如果我返回到第二個標籤有窗體(沒有刷新它)並提交表單,它會給我這個錯誤 – Rana

+0

這是一種預期的行爲! – delboy1978uk

+0

@ delboy1978uk你認爲它更好地向用戶顯示錯誤信息嗎? – wahdan

0

首先,當請求是GET時,您不需要關心令牌。
其次,當您使用POST請求時,您必須在每個請求中保存token並使用它。 編碼方式取決於您的編碼。謝謝。

1

如果我理解正確的問題:

  • 您登錄爲用戶「管理員」;
  • 你去表單頁面;
  • 您從admin用戶註銷;
  • 無刷新表單頁面,提交表單,並獲得TokenMismatchException

在這種情況下,這是預期的行爲。從文檔:

此令牌用於驗證經過身份驗證的用戶是實際嚮應用程序發出請求的用戶。

當您註銷時,您的CSFR將變爲無效:這就是爲什麼您需要刷新頁面。

您可以通過VerifyCsrfToken.php修改$except屬性禁用它們特定的URI:

class VerifyCsrfToken extends BaseVerifier 
{ 
    /** 
    * The URIs that should be excluded from CSRF verification. 
    * 
    * @var array 
    */ 
    protected $except = [ 
     'your/route', 
    ]; 
} 
+0

是否可以使用$除數組添加路由? 像這條路線('route-to-something'); ? – wahdan

+0

不,你不能在給函數外的屬性賦值的時候放一些東西來評估,只有常量 – gbalduzzi

相關問題