如何在Rails应用程序中使用基本authentication与httparty?

具有基本身份validation的“httparty”命令行版本工作简单而优秀:

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

但是现在我正在寻找可以将基本身份validation添加到来自Rails应用程序中的HTTParty.get调用的方式。 首先,出于testing目的,我想在Controller中对login凭证进行硬编码。 只是为了确保它的工作。 但我找不到任何文件或例子,你可以通过这些。

没有证书的HTTParty.get工作正常:

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

但是我不明白如何在这个上接受-u用户名:密码部分。

对于我来说,下一个挑战(对于Ruby / Rails来说是非常新鲜的)是从用户表单获取用户证书并dynamic传递它,但是现在最重要的是让硬编码版本正常工作。

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

两点,

  1. 如果你正在使用Twitter的api,除非我错了,我不认为他们允许基本的身份validation:(所以你可能想看看OmniAuth的OAuthlogin的东西。你不需要HTTParty或签名,在这种forms下,你链接到Twitter的login,用户在那里input凭据,然后Twitter发送一个callback请求到你的应用程序,一旦通过validation。OmniAuth为你做了大部分的工作,你只需要从你需要的信息它在callback路线中给了你什么。

  2. 但即便如此,您仍然需要特定于您的应用程序的OAuth“消费者密钥”和“消费者机密”(Twitter如何授权您的应用程序,与用户区分)。 你不需要这些,也不需要你的源代码中的任何授权密钥。

这样做的典型方法是把它们粘贴到一个config/omniauth.yml文件中,该文件没有签入到源代码控制中:

 twitter: key: CONSUMER_KEY secret: CONSUMER_SECRET 

然后将它们加载到初始化程序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 

你可以采取类似的方法加载基本的authentication用户名/密码,只要把它们放在你可以访问的某个对象上,无论你进行HTTParty调用。