2017-08-11 140 views
0

「laravel /框架」 空: 「5.4 *」, 「laravelcollective/HTML」: 「^ 5.4」,Laravel CSRF令牌AJAX渲染的內容

我有一個包含刪除按鈕局部視圖,並通過AJAX請求正常呈現。在後者之後,這些按鈕的表單在部分呈現時不會獲得CSRF令牌。隱藏的輸入值爲空,導致隨後使用的TokenMismatchException

請注意,這些按鈕的窗體不使用AJAX。我的問題與告訴JavaScript從meta標記獲取標記並將其包含在AJAX請求中無關。這工作正常。這些表格正在提交正常的老派請求。 (當頁面在刪除後重新加載內容被加載到正確的頁面時)。

導致正在呈現新局部的分頁請求會轉到API命名空間中的控制器。因此,我嘗試添加了「網絡」中間件的路線api.php:

Route::middleware(['auth:api', 'web']) ... 

這確實導致了令牌值在刪除形式展現出來。但是,我確信會發生這種情況,它與先前在元標記中設置的內容不匹配。

令牌傳遞給FormBuilder的構造函數。有沒有什麼我可以在控制器(在分頁請求中)將令牌傳遞給View,以便在部分呈現之前最終傳遞給FormBuilder? (我不清楚FormBuilder實例化的地點/時間。)

另一個想法可能是在分頁請求中包含令牌,將其作爲視圖變量從控制器傳遞,然後手動創建令牌輸入。 (有些邏輯只對ajax請求做它。)

雖然這看起來很詭異。在追求它之前,我想進一步考慮一下,並希望有人能夠想出如何實現前者(或更好的)解決方案。

回答

0

一個非常簡單的解決方案出現在我身上,雖然它不是特定於Laravel。我可以做的是讓分頁組件從meta標籤獲取標記,然後檢查傳入的html片段是否存在任何_token隱藏字段並根據需要應用該值。