2011-07-19 97 views
0

我使用設計寶石(1.4.2)和導軌(3.0.7)。我有一些檢查框和一些jquery的設置,當我檢查一個框時,它會發佈一個由我的控制器處理的帖子。不幸的是,當我這樣做時,它將當前用戶簽出。有沒有簡單的方法來避免這種情況?謝謝!設計寶石和jquery

jQuery代碼:

$(‘.do_some_action).live(‘change’, function(){ 
    $.post(‘/my_model/do_some_action’, {param1 : param1Value}) 
    return false 
}) 

基本控制器:

class AuthorizedController < ApplicationController 
    before_filter :authenticate_user! 
    check_authorization 
    load_and_authorize_resource 

    rescue_from CanCan::AccessDenied do |exception| 
    flash[:error] = exception.message 
    redirect_to request.referer 
    end 
end 

特定的控制器:

class MyModelsController < AuthorizedController 
    ... 
    def some_action 
    ... 
    end 
end 

-Jordan

+3

我們....需要....代碼... – user482594

+0

我們....需要....代碼... - user482594 3分鐘前 – fl00r

+0

仍不足以代碼:)這是抽象說什麼具體 – RocketR

回答

1

聽起來你不傳遞CSFR令牌在你的A JAX請求。

確保通過在HTML中調用csrf_meta_tag來設置CSFR元標記。然後,您可以使用下面的JavaScript代碼來確保在任何AJAX請求上設置CSFR標記。

$.ajaxSetup({beforeSend: function(xhr) {xhr.setRequestHeader("X-CSRF-Token", $("meta[name='csrf-token']").attr("content")); }}); 

您還可以通過在控制器中加入以下禁用該動作的CSFR檢查,但JavaScript的替代效果會更好。

skip_before_filter :verify_authenticity_token