这是什么意思 ? >> ActionController的:: InvalidAuthenticityToken

时间:2010-08-24 16:45:02

标签: jquery ruby-on-rails ruby

我很好奇这意味着什么。

但这是具体细节..

我正在做一个可排序的jquery项目,它涉及这个rails操作:

def update_order
  params[:media].each_with_index do |id, index|
    media = @organization.media.find(id)
    media.do_not_touch = true
    media.update_attribute('position', index+1)
  end if params[:media]
  render :nothing => true
end

我只是在寻找出现此错误的一般原因。

2 个答案:

答案 0 :(得分:5)

提交数据时,

Rails automatically checks表示伪造数据。来自doc:

  

保护控制器操作   通过确保所有的CSRF攻击   表格来自当前的网站   应用程序,而不是来自的伪造链接   另一个网站,是通过嵌入一个   基于存储的随机字符串的令牌   在会话中(攻击者   不会知道所有形式和Ajax   Rails生成的请求然后   验证其真实性   控制器中的令牌

您可以针对给定的Ajax调用禁用此功能,或者您也可以使用值为<%= form_authenticity_token %>

的名为“authenticity_token”的参数发送

要禁用它(我不推荐),您可以执行以下操作之一:

class FooController < ApplicationController
  protect_from_forgery :except => :update_order

  # you can disable csrf protection on controller-by-controller basis:
  skip_before_filter :verify_authenticity_token
end

答案 1 :(得分:1)

普通Rails表单助手将在表单中注入隐藏的真实性标记。当您自己滚动时,例如您可能正在为此Ajax代码执行的操作,您可能还没有添加令牌。

This old post有一些很好的提示可能会对您有所帮助,具体取决于您是否真的关心使用该令牌,还是只想将其关闭以执行该操作。