webpack jquery ajax rails 5 InvalidAuthenticityToken

Sta*_*uro 2 javascript ajax jquery webpack ruby-on-rails-5

我使用Rails 5.1 + webpack当我将jQuery包含到我的项目中时

 plugins: [
    new webpack.ProvidePlugin({
        'jQuery': 'jquery',
        '$': 'jquery',
        'global.jQuery': 'jquery'
    })
  ]
Run Code Online (Sandbox Code Playgroud)

并尝试使用jQuery.ajax PUT,POST或DELETE请求,例如

var that = this;
$.ajax({
  url: navigator_item.url,
  method: 'DELETE',
  success: function(res) {
   ...
  }
});
Run Code Online (Sandbox Code Playgroud)

我得到ActionController::InvalidAuthenticityToken.

但是,当我在app.js文件中包含下一行的jQuery时

import $ from 'jquery'
window.jQuery = $;
window.$ = $; // lazy fix if you want to use jQuery in your inline scripts.
Run Code Online (Sandbox Code Playgroud)

这在shared.js中

module.exports = {
  resolve: {
    alias: {
        'jquery': 'jquery/src/jquery'
    }
  }
Run Code Online (Sandbox Code Playgroud)

jQuery.ajax 工作良好.

jQuery.ajax当你将jQuery作为插件包含时,有没有办法使用?

Kku*_*kis 6

ActionController::InvalidAuthenticityToken与jQuery无关.

你必须通过一个authenticity_token与你的所有参数PUT,POSTDELETE请求.

要做到这一点,你通常可以从标题中获取它 $('[name="csrf-token"]')[0].content

所以你的请求看起来像:

var that = this;
$.ajax({
  url: navigator_item.url,
  data: { authenticity_token: $('[name="csrf-token"]')[0].content},
  method: 'DELETE',
  success: function(res) {
   ...
  }
});
Run Code Online (Sandbox Code Playgroud)