web-dev-qa-db-fra.com

Comment utiliser l'authentification de base avec httparty dans une application Rails?

La version en ligne de commande de "httparty" avec authentification de base fonctionne simplement et très bien:

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

Mais maintenant, je cherche la façon d'ajouter l'authentification de base à un appel HTTParty.get à partir d'une application Rails. Tout d'abord, à des fins de test, je veux coder en dur le informations d'identification de connexion dans le contrôleur. Juste pour vous assurer que cela fonctionne. Mais je ne trouve aucune documentation ou des exemples sur la façon de les transmettre.

Un HTTParty.get sans informations d'identification fonctionne correctement:

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

Mais je ne vois pas comment je peux faire une variation à ce sujet qui accepte la partie - u username: password.

Le prochain défi pour moi (je suis très nouveau sur Ruby/Rails) est d'obtenir les informations d'identification de l'utilisateur à partir d'un formulaire utilisateur et de les transmettre dynamiquement, mais le plus important pour moi maintenant, c'est de faire fonctionner la version codée en dur.

66
Dr.Bob
auth = {:username => "test", :password => "test"}
@blah = HTTParty.get("http://Twitter.com/statuses/public_timeline.json", 
                     :basic_auth => auth)
139

Deux points,

  1. Si vous utilisez l'API de Twitter, à moins que je ne me trompe, je ne pense pas qu'ils autorisent plus l'authentification de base :( Donc, vous voudrez peut-être examiner quelque chose comme OmniAuth pour la connexion OAuth . Vous n'avez pas besoin de HTTParty ou d'un formulaire de connexion pour cela, vous vous connectez à la connexion Twitter et l'utilisateur y entre les informations d'identification, puis Twitter envoie une demande de rappel à votre application une fois authentifié. OmniAuth fait la plupart du travail pour vous, vous tirez simplement les informations dont vous avez besoin de ce qu'elles vous donnent dans la route de rappel.

  2. Mais même ainsi, vous aurez toujours besoin de la OAuth "clé du consommateur" et du "secret du consommateur" qui sont spécifiques à votre application (comment Twitter autorise votre application, par opposition à l'utilisateur). Et vous ne voulez pas ces clés, ni aucune clé d'authentification, dans votre code source.

Une façon typique de le faire est de les coller dans un fichier config/omniauth.yml Qui n'est pas archivé dans le contrôle de code source:

Twitter:
  key: CONSUMER_KEY
  secret: CONSUMER_SECRET

Et puis chargez-les dans un initialiseur 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

Vous pouvez adopter une approche similaire avec le chargement d'un nom d'utilisateur/mot de passe d'authentification de base, il suffit de les coller dans un objet auquel vous aurez accès où que vous fassiez les appels HTTParty.

0
Eric G