78

带有基本身份验证的命令行版本的“httparty”工作起来既简单又好用:

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

但是现在我正在寻找可以将基本身份验证添加到从 Rails 应用程序中调用 HTTParty.get 的方法。首先,出于测试目的,我想在控制器中对登录凭据进行硬编码。只是为了确保它有效。但是我找不到任何文档或示例如何传递这些。

没有凭据的 HTTParty.get 可以正常工作:

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

但是我看不出如何对此进行修改以接受-u username:password部分。

对我来说(我对 Ruby/Rails 非常陌生)的下一个挑战是从用户表单中获取用户凭据并动态传递它,但现在对我来说最重要的是让硬编码版本能够工作。

4

2 回答 2

165
auth = {:username => "test", :password => "test"}
@blah = HTTParty.get("http://twitter.com/statuses/public_timeline.json", 
                     :basic_auth => auth)
于 2011-10-02T17:13:52.447 回答
0

两点,

  1. 如果您正在使用 Twitter 的 api,除非我弄错了,否则我认为他们不再允许基本身份验证了 :( 所以您可能需要研究OmniAuth 之类的 OAuth 登录。您不需要 HTTParty 或登录-为此,您链接到 Twitter 登录并且用户在那里输入凭据,然后 Twitter 在通过身份验证后向您的应用发送回调请求。OmniAuth 为您完成大部分工作,您只需从中提取所需的信息它在回调路由中为您提供了什么。

  2. 但即便如此,您仍然需要特定于您的应用程序的 OAuth 'consumer key' 和 'consumer secret'(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

您可以采用类似的方法来加载基本的身份验证用户名/密码,只需将它们粘贴在您可以从任何进行 HTTParty 调用的任何位置访问的某个对象中。

于 2011-10-02T18:37:03.530 回答