【问题标题】:How to use basic authentication with httparty in a Rails app?如何在 Rails 应用程序中使用 httparty 的基本身份验证?
【发布时间】:2011-11-29 10:57:25
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:
    auth = {:username => "test", :password => "test"}
    @blah = HTTParty.get("http://twitter.com/statuses/public_timeline.json", 
                         :basic_auth => auth)
    

    【讨论】:

    【解决方案2】:

    两点,

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

    2. 但即便如此,您仍然需要特定于您的应用程序的 OAuth 'consumer key' 和 'consumer secret'(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 调用的任何位置访问的对象中。

    【讨论】:

    • 您好,埃里克,感谢您提供更多信息。 Twitter url 只是一个例子,因为我正在与之交谈的真正 API 是一个私有系统。它对我有用,希望对其他使用 httparty 作为 REST 客户端的人有用。很抱歉可能造成的混乱!您的附加信息也很有趣,只要我进一步了解应用程序,就会使用它。
    猜你喜欢
    • 1970-01-01
    • 2019-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多