【问题标题】:Rails 4 Ajax request with no authenticity token没有真实性令牌的 Rails 4 Ajax 请求
【发布时间】:2014-06-18 13:26:31
【问题描述】:

我正在我的应用程序中通过 javascript 发送一些非常简单的 ajax 发布和补丁请求。功能很好,按预期工作。但是,我在 ajax 请求参数中看不到真实性令牌,它仍然有效。

javascript (jQuery)

$.ajax({
  type:'PATCH', 
  url: '/dashboard/goals/#{@goal.id}.js', 
  data: $.param({ 
    new_invitation: { 
      recipient_id: recId, 
      type: "GoalInvite", 
      user_id : #{current_user.id}
    }
  })
}); 

并且参数在日志中显示如下-

Parameters: {"new_invitation"=>{"recipient_id"=>"24", "type"=>"GoalInvite", "user_id"=>"23"}, "id"=>"234"}

没有真实性令牌。我想我知道如何添加它,但我很惊讶它甚至可以在没有它的情况下工作。任何人都可以对此有所了解吗?

【问题讨论】:

  • protect_from_forgery 在应用程序中。控制器。 ?
  • 是的,它在应用控制器中

标签: jquery ruby-on-rails ajax authenticity-token


【解决方案1】:

如果您检查请求对象,您会(希望)看到有一个名为 HTTP_X_CSRF_TOKEN 的请求标头包含真实性令牌。 jquery_ujs 库会为您解决这个问题,因此您不必手动将令牌包含在 AJAX 请求中。

【讨论】:

  • 是的,标题是X-CSRF-Token:
  • 成功了!在将行 = require jquery_ujs 放入 application.js 文件之后。谢谢。
  • +1 提醒我 jquery_ujs 库为我做了这件事。我在应用程序的面向外部/客户端的一侧工作,并且没有包含此内容,并且无法弄清楚为什么只有这个特定的 ajax 请求在抱怨身份验证令牌。谢谢!
猜你喜欢
  • 2011-05-05
  • 2013-04-21
  • 1970-01-01
  • 2016-03-08
  • 1970-01-01
  • 2011-03-04
  • 2011-03-04
  • 2014-07-04
  • 1970-01-01
相关资源
最近更新 更多