2016-11-29 5 views
3

При загрузке изображения через редактор wysiwyg мне нужно передать токен Laravel CSRF с помощью FormData(). Но похоже, что он терпит неудачу или он не добавляет токен csrf, используя метод append().Добавление маркера 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

Его не добавляя CSRF токен Laravel с данными формы, потому что до сих пор я получаю сообщение об ошибке

TokenMismatchException в VerifyCsrfToken.php строка 68

Как добавить токен с данными формы?

+0

Какие 'Laravel.csrfToken' возвращается? –

+0

@SaumyaRastogi только токена. – rakibtg

ответ

7

Вы должны добавить поле с именем - _token, вместо csrfToken как это:

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

Это то, что вспомогательный метод Laravel в - csrf_field() делает.

Согласно Laravel Docs, в случае Ajax звонки - можно, например, хранить маркер в мета-тег HTML ::

<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

Смежные вопросы