読者です 読者をやめる 読者になる 読者になる

OmniAuth(OAuth2.0)でproxyを使う方法

YammerのOAuthで認証するアプリが作りたいんだけど、

proxyが必要なネットワーク内でかつ、
環境変数の”http_proxy”が使えないときのメモ。

※そんなマニアックスな人が世の中にどれだけいるか甚だ疑問ですが、、

結果的に、

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :yammer , ENV["YAMMER_CONSUMER_KEY"], ENV["YAMMER_CONSUMER_SECRET"], 
           :client_options => {:connection_opts => { :proxy => "http://proxy.sample.com:80" }}
end

こんな感じでいけました。

deviseだと、

config/initializers/devise.rb

  config.omniauth :yammer, ENV["YAMMER_CONSUMER_KEY"], ENV["YAMMER_CONSUMER_SECRET"],
                  :client_options => {:connection_opts => { :proxy => "http://proxy.sample.com:80" }}

こんな感じです。

※OAuth2.0仕様です。

仕組みとしては、

各OAuthプロバイダのライブラリ(ここではomniauth-yammer)が、
omniauth-oauth2ライブラリのOAuth2クラスを継承していて、

そこからoauth2ライブラリの接続用Clientクラスを生成するのですが、
その際に引き渡すオプション名がclient_optionsとなっていて、

さらに、

そのClientクラスがhttpクライアントライブラリである
faradayのインスタンスを生成する際に引き渡すオプション名がconnection_optsという顛末でした。

とりあえず通って良かったね!