首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用表单数据添加laravel令牌

用表单数据添加laravel令牌
EN

Stack Overflow用户
提问于 2016-11-29 13:26:52
回答 3查看 10.1K关注 0票数 4

当通过wysiwyg编辑器上传图像时,我需要通过FormData()传递Laravel令牌。但是它似乎失败了,或者它没有使用append()方法添加csrf令牌。

这是我的代码:

代码语言:javascript
复制
  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 );
        }
    });
  }

它没有在表单数据中添加laravel令牌,因为我仍然收到了一个错误。

TokenMismatchException在VerifyCsrfToken.php第68行

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-11-29 13:31:26

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

代码语言:javascript
复制
data.append( "_token", Laravel.csrfToken ); // <- adding csrf token

这就是Laravel的助手方法-- csrf_field()所做的。

根据Laravel博士的说法,在Ajax调用的情况下--例如,可以将令牌存储在HTML标记中:

代码语言:javascript
复制
<meta name="csrf-token" content="{{ csrf_token() }}">

然后在ajax头中包括如下内容:

代码语言:javascript
复制
$.ajaxSetup({
   headers: {
       'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
   }
});

希望这能有所帮助!

票数 11
EN

Stack Overflow用户

发布于 2016-11-29 13:35:33

对于ajax请求,我喜欢用$.ajaxSetup设置一次。

在我的布局中:

代码语言:javascript
复制
<meta name="csrf-token" content="{{ csrf_token() }}">

在我的app.js:

代码语言:javascript
复制
$.ajaxSetup({
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    }
});

这就省去了我必须记住将_token输入附加到每个请求中。

票数 2
EN

Stack Overflow用户

发布于 2016-11-29 13:41:55

虽然@Saumya已经回答了这个问题,但我使用头发送CSRF令牌,如下所示:

代码语言:javascript
复制
$.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在整个应用程序中发送多个请求,则可以同时为每个请求设置全局请求:

代码语言:javascript
复制
$.ajaxSetup({
headers: {
    'X-CSRF-TOKEN': Laravel.csrfToken
}
});

学习更多这里

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40867101

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档