2011-10-02 8 views
57

La versione a riga di comando di 'httparty' con l'autenticazione di base funziona semplice e grande:Come utilizzare l'autenticazione di base con httparty in un'app Rails?

httparty -u username:password http://example.com/api/url 

ma ora sto cercando il modo posso aggiungere l'autenticazione di base per una chiamata HTTParty.get dall'interno di un Rails app. Prima di tutto, per scopi di test, voglio codificare in modo rigido le credenziali di accesso nel Controller. Solo per assicurarsi che funzioni. Ma non riesco a trovare alcuna documentazione o esempi su come poterli passare.

Un HTTParty.get senza credenziali funziona bene:

@blah = HTTParty.get("http://twitter.com/statuses/public_timeline.json") 

Ma non vedo come posso fare una variante di questa che accetta il nome utente -u: la password parte.

La prossima sfida per me (sono molto nuovo per Ruby/Rails) è ottenere le credenziali dell'utente da un modulo utente e passarlo dinamicamente, ma per me è ancora più importante per far funzionare la versione codificata.

risposta

113
auth = {:username => "test", :password => "test"} 
@blah = HTTParty.get("http://twitter.com/statuses/public_timeline.json", 
        :basic_auth => auth) 
+1

Grazie, funziona! Hai ottenuto questo da qualche tipo di documento di HTTParty, o questa è da considerarsi una sintassi di rota 'standard' che ho bisogno di padroneggiare ... :-) –

+2

L'ho preso da questo esempio https://github.com/jnunemaker/ httparty/blob/master/examples/twitter.rb –

+3

E 'auth = {username: "test", la password: "test"}' funziona altrettanto bene con Ruby 1.9. – Joe

-1

Due punti,

  1. Se si sta colpendo le API di Twitter, se non mi sbaglio non credo che essi consentono di autenticazione di base più :(quindi si consiglia di guardare in qualcosa di simile OmniAuth per l'accesso OAuth. Non è necessario HTTParty o un modulo di accesso per questo, si collega all'accesso a Twitter e l'utente inserisce le credenziali lì, quindi Twitter invia una richiesta di richiamata alla propria app una volta autenticata. fa la maggior parte del lavoro per voi, basta tirare le informazioni che servono fuori di che cosa gli dà nel percorso di callback.

  2. Ma anche così, avrete ancora bisogno di OAuth 'consumer key' e 'consumer secret' che sono specifici per la vostra applicazione (come Twitter autorizza la vostra applicazione, in quanto distinta dall'utente). E tu non vuoi questi, né alcuna chiave di autenticazione, nel tuo codice sorgente.

Un tipico modo di fare questo è incollarle in un file config/omniauth.yml che non è controllato in controllo del codice sorgente:

twitter: 
    key: CONSUMER_KEY 
    secret: CONSUMER_SECRET 

E poi caricarli in un inizializzatore config/initializers/omniauth.rb:

consumers = YAML.load("#{Rails.root}/config/omniauth.yml") 

Rails.application.config.middleware.use OmniAuth::Builder do 
    provider :twitter, consumers['twitter']['key'], consumers['twitter']['secret'] 
end 

Si potrebbe adottare un approccio simile con carico autenticazione base di nome utente/password, basta attaccare in qualche oggetto che si avrà accesso da ovunque si effettuino le chiamate HTTParty.

+0

Ciao Eric, grazie per le informazioni aggiuntive. L'URL di Twitter è solo per esempio, poiché la vera API con cui sto parlando è un sistema privato.Funziona per me, e spero che altri utilizzino httparty come client REST. Ci scusiamo per l'eventuale confusione! Anche le tue informazioni aggiuntive sono interessanti, funzioneranno non appena sarò più avanti nell'applicazione. –

Problemi correlati