我升級到Rails 3.0.5 & Devise 1.1.8。當我嘗試刪除任何對象(通過一個視圖與:遠程=>真),我得到一個身份驗證對話框和Devise會話被銷燬。然後,我必須再次登錄,對象仍然存在...是否有其他人有這個問題?任何想法如何解決它?嘗試銷燬對象時設計註銷(Rails 3.0.5&Devise 1.1.8)
非常感謝。
我升級到Rails 3.0.5 & Devise 1.1.8。當我嘗試刪除任何對象(通過一個視圖與:遠程=>真),我得到一個身份驗證對話框和Devise會話被銷燬。然後,我必須再次登錄,對象仍然存在...是否有其他人有這個問題?任何想法如何解決它?嘗試銷燬對象時設計註銷(Rails 3.0.5&Devise 1.1.8)
非常感謝。
此問題與Devise無關。簡而言之,由於Rails 3.0.4要求每個非GET請求都應該有CSRF令牌,否則會話被清除。
有現在將要求所有 非GET請求在此 固定兩個大的變化,當CSRF保護 未能改變了行爲和 令牌。
應用這個補丁失敗後CSRF 請求將不再生成HTTP 500錯誤,代替會議將 復位。用戶可以通過在其自己的 控制器中重寫 handle_unverified_request來覆蓋此行爲。
更多細節在這裏:http://weblog.rubyonrails.org/2011/2/8/csrf-protection-bypass-in-ruby-on-rails
jQuery的片段與AJAX使用要求
$(document).ajaxSend(function(e, xhr, options) {
var token = $("meta[name='csrf-token']").attr("content");
xhr.setRequestHeader("X-CSRF-Token", token);
});
如果您使用的原型,你需要下面的代碼:
Ajax.Responders.register({
onCreate: function(request) {
var csrf_meta_tag = $$('meta[name=csrf-token]')[0];
if (csrf_meta_tag) {
var header = 'X-CSRF-Token',
token = csrf_meta_tag.readAttribute('content');
if (!request.options.requestHeaders) {
request.options.requestHeaders = {};
}
request.options.requestHeaders[header] = token;
}
}
});
我在Rails 3.0.5 + Devise(1.x + 1.2RC)中遇到了同樣的問題:用戶正在註銷某些AJAX請求。
現在唯一的解決方法是將Rails降級到3.0.3。
我使用rails 3.0.5,並簡單地用這裏最新的一個替換我的public/javascript/rails.js(https://github.com/rails/jquery-ujs/blob/master/src/rails.js)解決了這個問題!
PS:當您僅使用jquery時,應該使用rails.js!
我有同樣的麻煩,沒有一個阿賈克斯銷燬電話原來我只是在我的舊版面的標題中缺少<%= csrf_meta_tag%>。
好吧..我會保持3.0.3一段時間.. thanx! – 2011-03-16 04:08:18