如何在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)
两点,
-
如果你正在使用Twitter的api,除非我错了,我不认为他们允许基本的身份validation:(所以你可能想看看OmniAuth的OAuthlogin的东西。你不需要HTTParty或签名,在这种forms下,你链接到Twitter的login,用户在那里input凭据,然后Twitter发送一个callback请求到你的应用程序,一旦通过validation。OmniAuth为你做了大部分的工作,你只需要从你需要的信息它在callback路线中给了你什么。
-
但即便如此,您仍然需要特定于您的应用程序的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调用。