Dar*_*evo 7 ruby-on-rails devise
我升级到Rails 3.0.5和Devise 1.1.8.当我尝试删除任何对象时(通过带有:remote => true的视图),我得到一个身份验证对话框,并且销毁了Devise会话.然后,我必须再次登录,对象仍在那里......其他人是否有这个问题?关于如何解决它的任何想法?
非常感谢你.
Yur*_*huk 16
这个问题与Devise无关.简而言之,自从Rails 3.0.4以来,每个非GET请求都需要具有CSRF令牌,否则会话被清除.
此修复程序有两个主要更改,CSRF保护失败时的行为已更改,现在所有非GET请求都需要令牌.
应用此修补程序失败后,CSRF请求将不再生成HTTP 500错误,而是会重置会话.用户可以通过在自己的控制器中覆盖handle_unverified_request来覆盖此行为.
更多细节在这里:http://weblog.rubyonrails.org/2011/2/8/csrf-protection-bypass-in-ruby-on-rails
用于AJAX请求的jQuery代码段
$(document).ajaxSend(function(e, xhr, options) {
var token = $("meta[name='csrf-token']").attr("content");
xhr.setRequestHeader("X-CSRF-Token", token);
});
Run Code Online (Sandbox Code Playgroud)
如果您正在使用原型,则需要以下代码:
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;
}
}
});
Run Code Online (Sandbox Code Playgroud)