2016-11-29 24 views
3

通過wysiwyg編輯器上傳圖像時,我需要將Laravel CSRF令牌與FormData()一起傳遞。但它似乎失敗了,或者它不會使用append()方法添加csrf標記。使用表單數據添加laravel CSRF令牌

這裏是我的代碼:

function uploadImage(image) { 
    var data = new FormData(); 
    data.append("image", image); 

    data.append("csrfToken", Laravel.csrfToken); // <- adding csrf token 
    // Laravel.csrfToken will return the csrf token. 

    console.log(data.entries()); 
    $.ajax ({ 
     data: data, 
     type: "POST", 
     url: "/article/store/image", 
     cache: false, 
     contentType: false, 
     processData: false, 
     success: function(url) { 
     var image = IMAGE_PATH + url; 
      $('#editor').summernote("insertImage", image); 
     }, 
     error: function(data) { 
      console.log(data); 
     } 
    }); 
    } 

enter image description here

它不與表單數據添加laravel CSRF令牌,因爲我仍收到錯誤

TokenMismatchException在VerifyCsrfToken.php line 68

如何添加帶有表單數據的令牌?

+0

什麼'Laravel.csrfToken'回報? –

+0

@SaumyaRastogi只是令牌字符串。 – rakibtg

回答

7

您應該添加一個名爲場 - _token,而不是csrfToken這樣的:

data.append("_token", Laravel.csrfToken); // <- adding csrf token 

這是Laravel的助手方法 - csrf_field()一樣。

Laravel Docs,在阿賈克斯的情況下調用 - 你可以,例如,存儲在一個HTML meta標籤::

<meta name="csrf-token" content="{{ csrf_token() }}"> 

令牌,然後包括你的Ajax標題是這樣的:

$.ajaxSetup({ 
    headers: { 
     'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') 
    } 
}); 

希望這會有所幫助!

2

對於ajax請求,我喜歡用$ .ajaxSetup設置一次。

在我的佈局:

<meta name="csrf-token" content="{{ csrf_token() }}"> 

在我app.js:

$.ajaxSetup({ 
    headers: { 
     'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') 
    } 
}); 

這節省了我不必記住到_token輸入追加到每一個要求。

2

而@Saumya已經回答了這個問題,我用頭髮送CSRF令牌就像這樣:

$.ajax ({ 
    data: data, 
    type: "POST", 
    headers: {'X-CSRF-TOKEN': Laravel.csrfToken }, 
    url: "/article/store/image", 
    cache: false, 
    contentType: false, 
    processData: false, 
    success: function(url) { 
    var image = IMAGE_PATH + url; 
     $('#editor').summernote("insertImage", image); 
    }, 
    error: function(data) { 
     console.log(data); 
    } 
}); 

如果您正在使用AJAX來在整個應用程序發送多個請求,你可以將它設置爲全球每請求一次:

$.ajaxSetup({ 
headers: { 
    'X-CSRF-TOKEN': Laravel.csrfToken 
} 
}); 

瞭解更多Here