2011-10-02 106 views
57

命令行版本的“httparty”基本身份验证的工作简单而伟大:如何在Rails应用程序中使用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用户名这一变化:密码一部分。

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

回答

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

谢谢,工作!你从某种HTTParty文档中得到了这个,或者这被认为是我需要掌握的'标准'rails语法... :-) –

+2

我从这个例子中得到了它https://github.com/jnunemaker/ httparty/blob/master/examples/twitter.rb –

+3

''auth = {username:“test”,password:“test”}'和Ruby 1.9一样好。 – Joe

-1

两点,

  1. 如果你打Twitter的API,除非我错了,我不认为他们允许基本验证了:(所以,你可能想看看像OmniAuth用于OAuth登录。您不需要HTTParty或登录表单,您链接到Twitter登录并且用户在那里输入凭据,然后Twitter一旦通过身份验证就向您的应用发送回叫请求。为你做了大部分工作,你只需将你需要的信息从回调路线中提供的信息中提取出来即可。

  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 

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

+0

嗨,埃里克,感谢您的额外信息。 Twitter网址只是一个例子,因为我所说的真正的API是一个私人系统。它适用于我,并希望对于其他使用httparty作为REST客户端的用户。对不起,可能会造成混乱! 您的其他信息也很有趣,只要我在应用程序中进一步处理,就可以使用它。 –

相关问题