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.
quelle
auth = {username: "test", password: "test"}
funktioniert genauso gut mit Ruby 1.9.auth = "testuser:password"
wie können wir es so machen?Zwei Punkte,
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.
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.yml
Datei 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.
quelle