Ho giocato con l'utilizzo di rest-client per accedere a un'app di rails che ho scritto. Ho scritto uno script veloce per accedere e fare una richiesta di post. Tutto funziona, ma ho dovuto aggirare il fatto che non viene fornito nessun autenticità_token se si fa una richiesta per un modulo in json. Ho dovuto fare una richiesta html regolare in altri ottenere il authenticity_token e quindi incluso questo nel json che ho inviato come parte della mia richiesta di post. Fondamentalmente ho un uno script rapido sporca come quella qui sottoottenere token csrf per richieste json post a un'app per rails
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})
C'è la possibilità di disattivare la protezione CSRF per le richieste di JSON ma non vorrei piuttosto fare. Potrei andare al percorso della meccanizzazione o qualcosa di simile e quindi non mi preoccuperei delle richieste di JSON con CSRF ma volevo solo giocare con questa roba con rest-client
Immagino di essere solo curioso di sapere se c'è una ragione per cui non viene fornito autenticità_token per le richieste json e mi chiedo anche se c'è un modo migliore per risolvere il problema token rispetto all'approccio piuttosto hacky che ho preso qui
Grazie per la risposta swati, sembra utile. Immagino che stavo cercando di evitare solo di disattivare i controlli CSRF. Mi sembra un po 'strano che le rotaie servano moduli json che non contengono alcun token ma che poi cercano un token. Avrebbe senso solo servire i moduli JSON con un token incluso piuttosto che spegnere gli assegni per il contenuto JSON? – Conor
benvenuto ... sì, questo è solo un modo per aggirare il problema con il token CSRF. Se desideri passare il token con la tua richiesta JSON, puoi utilizzare l'intestazione come: intestazioni: { 'X-CSRF-Token': '<% = form_authenticity_token.to_s%>' } – swati
controllo: http: // stackoverflow. it/questions/7203304/warning-cant-verify-csrf-token-authenticity-rails http://stackoverflow.com/questions/8503447/rails-how-to-add-csrf-protection-to-forms-created-in -javascript – swati