jquery - 即使请求头中包含正确的x-csrf标记,也不要在Ajax post上设置current_user



ruby-on-rails jquery-ui (1)

使用:Rails 3.0.7 Devise 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与期望的值相匹配。 然而,目前的捐助者仍然是零。

我已经阅读了这个帖子的几个帖子,事实上,一开始,csrf_meta_tag方法不在我的布局中,并且没有设置csrf标记。

但是,情况已经不复存在,csrf令牌正在被设置,但是我仍然没有得到current_donor值。

当我让Ajax获取请求时,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(){

    }
});




devise