如何在Rails应用程序中使用httparty进行基本身份验证?

时间:2011-10-02 15:57:52

标签: ruby ruby-on-rails-3 httparty

带有基本身份验证的'httparty'命令行版本工作简单而且很棒:

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

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

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

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

但是我不知道如何在接受 -u username:password 部分的情况下对其进行修改。

我的下一个挑战(对于Ruby / Rails来说是一个新手)是从用户表单获取用户凭据并动态传递它,但对我来说最重要的是让硬编码版本起作用。< / p>

2 个答案:

答案 0 :(得分:134)

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

答案 1 :(得分:0)

两点,

  1. 如果你正在使用Twitter的api,除非我弄错了,否则我认为他们不再允许基本身份验证:(所以你可能想要查看像OmniAuth这样的OAuth登录。您不需要HTTParty或登录表单,您链接到Twitter登录并且用户在那里输入凭据,然后Twitter在经过身份验证后向您的应用发送回叫请求.OmniAuth为您完成大部分工作,你只需从回调路线中提供的信息中提取所需的信息。

  2. 但即便如此,您仍然需要特定于您的应用程序的OAuth“消费者密钥”和“消费者密钥”(Twitter如何授权您的应用程序,区别于用户)。并且您不希望在源代码中使用这些,也不需要任何身份验证密钥。

  3. 执行此操作的典型方法是将其粘贴到 签入源控件的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
    

    您可以采用类似的方法加载基本的auth用户名/密码,只需将它们粘贴到您可以从HTTParty调用的任何地方访问的对象中。