получение токенов csrf для запросов json post к приложению rails

Я экспериментировал с использованием клиента rest -для доступа к написанному мной приложению rails. Я написал быстрый скрипт для входа в систему и отправки запроса. Все работает, но мне пришлось обойти тот факт, что токен подлинности _не обслуживается, если вы делаете запрос на форму в json. Мне пришлось сделать обычный html-запрос, чтобы получить токен подлинности _, а затем включить его в json, который я отправил как часть моего почтового запроса. По сути, у меня есть быстрый грязный скрипт, подобный приведенному ниже

private_resource = RestClient::Resource.new( 'https://mysite.com')

params =  {:user => {:email => 'user@mysite.com', :password => 'please'}}
#log in
login_response = private_resource['users/sign_in'].post(params, :content_type => :json, :accept => :json)
#get cookie
cookie = login_response.cookies
#get json  
json_response = private_resource['products/new'].get(:content_type => :json, :accept => :json, :cookies => cookie)
#another request that returns html form with authenticity token 
response_with_token = private_resource['products/new'].get( :cookies => cookie)
#extract token 
token = Nokogiri::XML(response_with_token).css('input[name=authenticity_token]').first.attr('value')
#update cookie
cookie = response_with_token.cookies
#populate form and insert token
form = JSON.parse(json_response)
form['name'] = "my product"
form['authenticity_token'] = token
#submit the request
private_resource['products'].post(form.to_json, {:cookies => cookie, :content_type => :json, :accept => :json})

. Есть возможность отключить защиту CSRF для запросов json, но я бы не стал этого делать. Я мог бы пойти по пути механизации или что-то подобное, и тогда я бы не беспокоился о запросах json с помощью CSRF, но я просто хотел поиграть с выполнением этого с клиентом rest -

Думаю, мне просто любопытно узнать если есть причина, по которой токен аутентификации _не обслуживается для запросов json, и мне также интересно, есть ли лучший способ решить проблему с токеном, чем довольно хакерский подход, который я использовал здесь

8
задан Conor 2 May 2012 в 12:31
поделиться