Не устанавливайте current_user на пост Ajax, хотя правильный заголовок x-csrf включен в заголовок запроса - PullRequest
7 голосов
/ 13 сентября 2011

Использование: 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 соответствует ожидаемому значению.Тем не менее, current_donor остается нулевым.

Я прочитал несколько постов по этому вопросу, и действительно, в самом начале, метод csrf_meta_tag не был в моем макете, и токен csrf не был установлен.

Однако это уже не так, токен csrf устанавливается, и все же я все еще не получаю значение current_donor.

Когда я делаю ajax запросы на получение, current_donor устанавливается правильно.

Буду очень признателен за любые ваши советы относительно того, куда мне следует обратиться.

Бест, Том

1 Ответ

9 голосов
/ 18 апреля 2012

У меня была такая же проблема раньше. Я решил это, включив 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(){

    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...