77 votes

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

La version ligne de commande de 'httparty' avec l'authentification de base œuvres simple et génial:

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

Mais maintenant, je suis à la recherche de la façon dont je peux ajouter l'authentification basique pour un HTTParty.obtenez de l'appel à partir d'une application Rails. Tout d'abord, pour des fins de test, je veux coder en dur les informations de connexion dans le Contrôleur. Juste pour s'assurer qu'il fonctionne. Mais je ne trouve pas de documentation ou des exemples de comment vous pouvez transmettre à ces.

Un HTTParty.sans informations d'identification fonctionne très bien:

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

Mais je ne vois pas comment je peux faire une variation sur ce que accepte le -u nom d'utilisateur:mot de passe de la partie.

Le prochain défi pour moi (suis très nouveau à Ruby/Rails) est d'obtenir l'identification de l'utilisateur à partir d'un formulaire d'utilisateur et le transmettre de manière dynamique, mais le plus important pour moi maintenant, pour obtenir la version codée en dur à travailler.

Aide appréciée, merci d'avance :-)

159voto

Vasiliy Ermolovich Points 14719
auth = {:username => "test", :password => "test"}
@blah = HTTParty.get("http://twitter.com/statuses/public_timeline.json", 
                     :basic_auth => auth)

0voto

Eric G Points 528

Deux points,

  1. Si vous frappez l'api Twitter, à moins que je me trompe, je ne pense pas qu'ils permettent l'authentification basique plus :( Donc, que vous aimeriez peut-être quelque chose comme OmniAuth pour OAuth de connexion. Vous n'avez pas besoin HTTParty ou un formulaire de connexion pour ce faire, vous le lien vers le Twitter de vous inscrire et que l'utilisateur entre des informations d'identification, alors Twitter envoie une demande de rappel à votre application une fois authentifié. OmniAuth fait la plupart du travail pour vous, il suffit de tirer les informations dont vous avez besoin de ce qu'il vous donne dans le rappel de l'itinéraire.

  2. Mais même ainsi, vous aurez toujours besoin de la OAuth 'clé' et 'consumer secret" qui sont spécifiques à votre application (comment Twitter autorise à votre application, à la différence de l'utilisateur). Et vous ne voulez pas cela, ni d'auth touches, dans votre code source.

Un typique de la façon de le faire est de les coller dans un config/omniauth.yml le fichier qui n'est pas vérifié à la source de contrôle:

twitter:
  key: CONSUMER_KEY
  secret: CONSUMER_SECRET

Et puis les charger 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 prendre une approche similaire avec chargement basic auth nom d'utilisateur/mots de passe, il suffit de coller dans un objet que vous aurez accès à partir de l'endroit où vous faites la HTTParty appels.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X