2010-08-24 174 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有一些很好的提示可以幫助你,這取決於你是真正關心使用該令牌還是隻想關閉該操作。