78

基本認証を使用した「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 の初心者) にとっての次の課題は、ユーザー フォームからユーザー資格情報を取得して動的に渡すことですが、ハード コードされたバージョンを機能させることが最も重要です。

4

2 に答える 2

165
auth = {:username => "test", :password => "test"}
@blah = HTTParty.get("http://twitter.com/statuses/public_timeline.json", 
                     :basic_auth => auth)
于 2011-10-02T17:13:52.447 に答える
0

二点、

  1. Twitter の api にアクセスしている場合、私が間違っていない限り、基本認証はもう許可されていないと思います:( したがって、OAuth サインイン用にOmniAuthなどを検討することをお勧めします。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呼び出しを行う場所からアクセスできるオブジェクトにそれらを貼り付けるだけです.

于 2011-10-02T18:37:03.530 に答える