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

84

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

2个回答

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

1
谢谢,可以用了!你是从HTTParty文档中找到这个的吗?还是这被认为是“标准”的Rails语法,我需要掌握它... :-) - Dr.Bob
4
我从这个例子中获取了它 https://github.com/jnunemaker/httparty/blob/master/examples/twitter.rb - Vasiliy Ermolovich
5
“auth = {username: "test", password: "test"}” 在 Ruby 1.9 中同样适用。 - Joe
2
@Vasiliy Ermolovich,它无法使用字符串基本身份验证工作,例如auth =“testuser:password”,我们如何使其以这种方式工作? - kamal
5
你也可以使用这种方式:http://www.rubydoc.info/github/jnunemaker/httparty/HTTParty%2FClassMethods%3Abasic_auth - Adriano Tadao
我们能发送NTLM认证吗?如果可以,那么如何发送? - faisal bhatti

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

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

嗨Eric,感谢提供额外的信息。Twitter的URL只是一个例子,因为我正在访问的真实API是私有系统。它对我有效,希望对使用httparty作为REST客户端的其他人也有效。对于可能造成的混淆,我感到抱歉! 你提供的额外信息也很有趣,一旦我在应用程序中进一步进行,就会使用它。 - Dr.Bob

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接