使用表单数据添加laravel CSRF令牌

rak*_*btg 3 javascript php laravel laravel-5 laravel-5.3

通过wysiwyg编辑器上传图像时,我需要传递Laravel CSRF令牌FormData().但它似乎失败了,或者它没有使用该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 );
        }
    });
  }
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

它没有添加带有表单数据的laravel csrf标记,因为我仍然收到错误

VerifyCsrfToken.php第68行中的TokenMismatchException

如何使用表单数据添加令牌?

Sau*_*ogi 7

你应该添加一个名为 - 的字段_token,而不是csrfToken像这样:

data.append( "_token", Laravel.csrfToken ); // <- adding csrf token
Run Code Online (Sandbox Code Playgroud)

这就是Laravel的助手方法csrf_field().

根据Laravel Docs,在Ajax调用的情况下 - 例如,您可以将令牌存储在HTML元标记::

<meta name="csrf-token" content="{{ csrf_token() }}">
Run Code Online (Sandbox Code Playgroud)

然后像这样包含在你的ajax标题中:

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

希望这可以帮助!