направляющие - InvalidAuthenticityToken для запросов json/xml

Создайте папку, где Вы хотите сохранить код и щелчок правой кнопкой по нему. Выберите SVN Checkout... и тип http://wittytwitter.googlecode.com/svn/trunk в URL поля репозитория.

можно также работать

svn checkout http://wittytwitter.googlecode.com/svn/trunk

из командной строки в папке, которую Вы хотите сохранить ею (svn.exe должен быть в Вашем пути, конечно).

21
задан Simone Carletti 8 August 2009 в 09:09
поделиться

3 ответа

Добавив до ответа андимизма, вы можете использовать это, чтобы применить включение ТОКЕНА по умолчанию в каждый запрос POST:

$(document).ajaxSend(function(event, request, settings) {
    if ( settings.type == 'POST' ||  settings.type == 'post') {
        settings.data = (settings.data ? settings.data + "&" : "")
            + "authenticity_token=" + encodeURIComponent( window._token );
    }
});
2
ответ дан 29 November 2019 в 06:42
поделиться

При включенном protect_from_forgery Rails требует токен аутентичности для любых запросов, не связанных с GET. Rails будет автоматически включать токен аутентичности в формы, созданные с помощью помощников форм или ссылок, созданных с помощью помощников AJAX, поэтому в обычных случаях вам не придется об этом думать.

Если вы не используете встроенные функции в форме Rails или помощников AJAX (возможно, вы делаете ненавязчивый JS или используете инфраструктуру JS MVC), вам придется самостоятельно установить токен на стороне клиента и отправить его вместе с вашими данными при отправке запроса POST. Вы поместите такую ​​строку в вашего макета:

<%= javascript_tag "window._token = '#{form_authenticity_token}'" %>

Затем ваша функция AJAX отправит токен с другими вашими данными (пример с jQuery):

$.post(url, {
    id: theId,
    authenticity_token: window._token
});
26
ответ дан 29 November 2019 в 06:42
поделиться

I had a similar situation and the problem was that I was not sending through the right content type headers - I was requesting text/json and I should have been requesting application/json.

I used curl the following to test my application (modify as necessary):

curl -H "Content-Type: application/json" -d '{"person": {"last_name": "Lambie","first_name": "Matthew"}}' -X POST http://localhost:3000/people.json -i

Or you can save the JSON to a local file and call curl like this:

curl -H "Content-Type: application/json" -v -d @person.json -X POST http://localhost:3000/people.json -i

When I changed the content type headers to the right application/json all my troubles went away and I no longer needed to disable forgery protection.

12
ответ дан 29 November 2019 в 06:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: