即使请求头中包含正确的x-csrf-token,也不要在Ajaxpost上设置current_user

使用:Rails 3.0.7设计1.4.5 jquery-rails 1.0.14

通过ajax发布数据时,Devise没有设置current_donor。

我的请求标头如下所示:

Host localhost:3000 User-Agent Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:6.0) Gecko/20100101 Firefox/6.0 Accept */* Accept-Language en-us,en;q=0.5 Accept-Encoding gzip, deflate Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7 Connection keep-alive Content-Type application/x-www-form-urlencoded; charset=UTF-8 X-Requested-With XMLHttpRequest x-csrf-token UFhqJrlOA1c1sAPeUTtV/ABcq5IeqkfA842ORcIWwks= 

在关联的控制器操作中,查看会话值,我发现以下内容:

 {"_csrf_token"=>"UFhqJrlOA1c1sAPeUTtV/ABcq5IeqkfA842ORcIWwks=", "warden.user.donor.key"=>["Donor", [485], "$2a$10$OtkItrzVhN4Ussnqy5k1Au"], "session_id"=>"e6693e22275385a58e0915538791ea49"} 

这将向我表明csrf_token与期望值匹配。 然而,current_donor仍然是零。

我已经阅读了几篇关于此的post,实际上,在开始时,csrf_meta_tag方法不在我的布局中,并且没有设置csrf标记。

但是,现在不再是这种情况了,正在设置csrf令牌,但我仍然没有得到current_donor值。

当我发出ajax get请求时,current_donor正在正确设置。

如果您对我应该看到的其他地方有任何建议,将不胜感激。

最好,汤姆

我之前遇到过同样的问题。 我通过包含csrf_token解决了它,如下所示

 $.ajax({ type: "GET", url: url, data: params , beforeSend: function(jqXHR, settings) { jqXHR.setRequestHeader('X-CSRF-Token', $('meta[name="csrf-token"]').attr('content')); }, error: function(){ alert("An error ocurred"); }, success: function(){ } });