2010-08-24 141 views
1

我很好奇这是什么意思一般。这是什么意思? >> ActionController :: InvalidAuthenticityToken

但这里是细节..

我正在做一个排序的jQuery项目,触及该轨道动作:

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 

我只是在寻找一个普遍原因,这个错误出现向上。

回答

5

Rails automatically checks用于提交数据时的伪造数据。从DOC:

通过确保所有 形式从目前的网络 应用程序,而不是伪造的链接来从 另一个站点保护从 CSRF攻击控制器动作,通过嵌入根据 令牌完成在由导轨产生 请求所有形式和Ajax存储 在会话(即攻击者 不会知道),然后验证 在控制器 令牌的真实性的随机串

您可以针对给定的Ajax调用禁用此,或者你也可以沿着一个名为“authenticity_token”与<%= form_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

正常的Rails表单助手会向表单中注入一个隐藏的真实性标记。当你推出自己的产品时,比如你可能为这个Ajax代码做了什么,你可能还没有添加令牌。

This old post有一些很好的提示可以帮助你,这取决于你是真正关心使用该令牌还是只想关闭该操作。