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


75

具有基本身份验证的'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来说是一个非常新的东西),下一个挑战是从用户表单中获取用户凭证并动态传递它,但是对我来说最重要的是现在它使硬编码版本能够正常工作。

Answers:


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

1
谢谢,工作!您是从某种HTTParty文档中获得此信息,还是应将其视为我需要掌握的“标准” rails语法... :-)
Dr.Bob 2011年


4
并且auth = {username: "test", password: "test"}与Ruby 1.9一样好用。
2013年

2
@Vasiliy Ermolovich它不适用于String基本身份验证,例如auth = "testuser:password",如何使它以这种方式工作?
kamal 16-10-25


0

两点

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

  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

您可以采用类似的方法来加载基本的auth用户名/密码,只需将它们放在可以从任何HTTParty调用位置访问的对象中即可。


嗨,埃里克(Eric),感谢您提供其他信息。Twitter URL仅作为示例,因为我正在使用的真实API是私有系统。它适用于我,希望适用于其他使用httparty作为REST客户端的人。对不起,可能造成混乱!您的其他信息也很有趣,只要在应用程序中,我将立即与您合作。
鲍勃博士,2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.