obtenir des jetons csrf pour json demandes post pour une application rails

J'ai été jouer avec l'aide de reste-client pour accéder à une application rails, j'ai écrit. J'ai écrit un script vite fait de vous connecter et de faire une requête post. Tout fonctionne mais j'ai eu à faire des ronds sur le fait qu'aucune authenticity_token est servi si vous faites une demande de formulaire en json. J'ai dû faire un html ordinaire, demander à d'autres d'obtenir les authenticity_token et ensuite inclus dans le json, j'ai déposé dans le cadre de ma requête post. Fondamentalement, je suis un coup d'un sale script comme celui ci-dessous

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

params =  {:user => {:email => '[email protected]', :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})

Il y a une option pour désactiver la protection CSRF pour json de la demande, mais je préfère ne pas le faire. Je pourrais aller le mécaniser la route ou quelque chose de similaire, et puis je ne voudrais pas vous soucier de json demandes avec CSRF, mais je voulais juste jouer avec le faire ce genre de choses avec le reste-client

Je suppose que je suis juste curieux de savoir si il ya une raison pourquoi pas authenticity_token est servi pour le json demandes et je me demande aussi si il ya une meilleure façon de résoudre le jeton de problème que la jolie hacky approche que j'ai pris ici

OriginalL'auteur Conor | 2012-05-02