Wie verwende ich die Basisauthentifizierung mit httparty in einer Rails-App?

75

Die Befehlszeilenversion von 'httparty' mit Basisauthentifizierung funktioniert einfach und großartig:

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

Aber jetzt suche ich nach einer Möglichkeit, die grundlegende Authentifizierung zu einem HTTParty.get-Aufruf in einer Rails-App hinzuzufügen. Zu Testzwecken möchte ich zunächst die Anmeldeinformationen im Controller fest codieren. Nur um sicherzugehen, dass es funktioniert. Aber ich kann keine Dokumentation oder Beispiele finden, wie Sie diese weitergeben können.

Ein HTTParty.get ohne Anmeldeinformationen funktioniert einwandfrei:

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

Aber ich sehe nicht, wie ich eine Variation davon vornehmen kann, die den Teil -u Benutzername: Passwort akzeptiert .

Die nächste Herausforderung für mich (ich bin sehr neu in Ruby / Rails) besteht darin, die Benutzeranmeldeinformationen aus einem Benutzerformular abzurufen und dynamisch weiterzugeben. Am wichtigsten für mich ist es jedoch, dass die hartcodierte Version funktioniert.

Dr.Bob
quelle

Antworten:

152
auth = {:username => "test", :password => "test"}
@blah = HTTParty.get("http://twitter.com/statuses/public_timeline.json", 
                     :basic_auth => auth)
Vasiliy Ermolovich
quelle
1
Danke, funktioniert! Haben Sie dies von einer Art HTTParty-Dokument erhalten, oder ist dies als 'Standard'-Rails-Syntax
anzusehen
3
Ich habe es aus diesem Beispiel github.com/jnunemaker/httparty/blob/master/examples/twitter.rb
Vasiliy Ermolovich
4
Und auth = {username: "test", password: "test"}funktioniert genauso gut mit Ruby 1.9.
Joe
2
@Vasiliy Ermolovich Es funktioniert nicht mit String Basic Auth, z. B. auth = "testuser:password"wie können wir es so machen?
Kamal
5
Sie können dies auch auf folgende Weise tun: rubydoc.info/github/jnunemaker/httparty/…
Adriano Tadao
0

Zwei Punkte,

  1. Wenn Sie auf die API von Twitter klicken, glaube ich nicht, dass sie die grundlegende Authentifizierung zulassen, es sei denn, ich irre mich . Sie sollten sich also etwas wie OmniAuth für die OAuth-Anmeldung ansehen. In diesem Formular verlinken Sie auf die Twitter-Anmeldung und der Benutzer gibt dort Anmeldeinformationen ein. Nach der Authentifizierung sendet Twitter eine Rückrufanforderung an Ihre App. OmniAuth erledigt den größten Teil der Arbeit für Sie. Sie ziehen einfach die benötigten Informationen heraus was es Ihnen in der Rückrufroute gibt.

  2. Trotzdem benötigen Sie weiterhin den OAuth-Konsumentenschlüssel und das Konsumentengeheimnis, die für Ihre Anwendung spezifisch sind (wie Twitter Ihre Anwendung im Unterschied zum Benutzer autorisiert). Und Sie möchten weder diese noch irgendwelche Authentifizierungsschlüssel in Ihrem Quellcode haben.

Ein typischer Weg, dies zu tun, besteht darin, sie in eine config/omniauth.ymlDatei zu stecken, die nicht in die Quellcodeverwaltung eingecheckt ist:

twitter:
  key: CONSUMER_KEY
  secret: CONSUMER_SECRET

Und laden Sie sie dann in einen Initialisierer 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

Sie können einen ähnlichen Ansatz verfolgen, indem Sie grundlegende Benutzernamen / Kennwörter für die Authentifizierung laden. Stecken Sie sie einfach in ein Objekt, auf das Sie von jedem Ort aus zugreifen können, an dem Sie HTTParty-Aufrufe tätigen.

Eric G.
quelle
Hallo Eric, danke für die zusätzlichen Infos. Die Twitter-URL ist nur zum Beispiel, da die eigentliche API, mit der ich spreche, ein privates System ist. Es funktioniert für mich und hoffentlich für andere, die httparty als REST-Client verwenden. Entschuldigung für die mögliche Verwirrung! Ihre zusätzlichen Informationen sind auch interessant, werden damit arbeiten, sobald ich weiter in der Anwendung bin.
Dr. Bob