web-dev-qa-db-ja.com

Railsアプリでhttpartyで基本認証を使用する方法?

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

66
Dr.Bob
auth = {:username => "test", :password => "test"}
@blah = HTTParty.get("http://Twitter.com/statuses/public_timeline.json", 
                     :basic_auth => auth)
139

2つのポイント、

  1. あなたがTwitterのAPIにアクセスしている場合、私が間違っていない限り、彼らはもう基本認証を許可していないと思います:(だから、あなたは OmniAuth for OAuthサインイン。これにはHTTPartyやサインインフォームは必要ありません。Twitterサインインにリンクし、ユーザーがそこに資格情報を入力すると、Twitterは認証されるとアプリにコールバックリクエストを送信します。ほとんどの作業を行います。コールバックルートで必要な情報から必要な情報を引き出すだけです。

  2. それでも、アプリケーション固有のOAuth 'consumer key'および 'consumer secret'が必要になります(Twitterはユーザーと区別して、アプリケーションを承認する方法)。そして、ソースコードにはこれらも認証キーも必要ありません。

これを行う典型的な方法は、ソース管理にチェックインされたnotである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
Eric G