0

我剛剛添加並配置了設計寶石。除了阻止表單的自動保存AJAX調用之外,它工作得很好。允許AJAX通過設計(Rails)

在我的控制器的頂部,我有:

before_filter :authenticate_user! 

我的AJAX調用涉及到同一個控制器:

def autosave 
    #TODO: update relative entry 
    #TODO: verify user logged in 
    #TODO: verify entry belongs to relative user 
    render content_type: 'text/xml', inline: "<result status='ok' />" 
    end 

當然,我可以代替聲明我之前過濾像這樣:

before_filter :authenticate_user!, except: :autosave 

..但這沒有提供任何阻止任何人在任何時間調用此控制器功能即

什麼是允許調用此函數的最佳方法?我仍然希望確保只有登錄的用戶才能撥打電話,而且他們正在編輯的給定記錄屬於他們。

回答

1

不完全確定你想要做什麼,但它聽起來像你只需要添加一些邏輯到自動保存。通過這個設置,這個功能本身仍然會被調用,但是不管它是否做了什麼都是另一個完全不同的條件,除非條件是正確的。

def autosave 
    #Verify that the user is signed in and he has ownership of entry 
    if !current_user.nil? && entry.user == current_user 
    render content_type: 'text/xml', inline: "<result status='ok' />" 
    else 
    #do nothing nothing or redirect with error here 
    end 
end 

既然你讓你必須提供一些額外的信息到你的Ajax調用作爲安全對策,即CSRF安全令牌的AJAX職位。有關使用安全令牌的示例AJAX請求,請參閱Devise not setting current_user on Ajax post even though correct x-csrf-token is included in request header。另外,請確保您的頭標中還包含<%= csrf_meta_tag %>

+0

由於調用來自AJAX(一個CKEDITOR形式是確切的)而不是來自Rails鏈接,它看起來像current_user.nil?將永遠回報真實。 是否有我必須傳遞的特定參數? – kwikness

+0

current_user返回的是什麼? – kwikness

+0

查看我關於安全令牌的更新答案。 – Noz

相關問題