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

oauth_adapter というgemを作りました #mokumoku_onsen

1/9(土)〜11(月)で開発合宿に参加していました。

mokumoku-onsen.connpass.com

そこで oauth_adapter という gem を作ったので紹介します。

注意点

GitHub のドキュメント、テストがまだ全くないです。ある程度の動作確認はしていますが、もし変な挙動があれば Issue か Pull Request をください。

ドキュメントとテストは数日中に整備する予定です。

概要

これは oauthoauth2 の2つを簡単に使い分ける手段を提供する gem です。

インストール方法

Gemfile に gem を追加します。

gem 'oauth_adapter'

使い方

まず、アプリケーションで使用する OAuth の provider を登録します。

# config/initialize/oauth_adapter.rb
OAuthAdapter.configure do
  provider :twitter, ENV['TWITTER_KEY'], ENV['TWITTER_SECRET'], 'https://api.twitter.com'
  provider :github, ENV['GITHUB_KEY'], ENV['GITHUB_SECRET'], 'https://api.github.com'
end

もし omniauth と一緒に使う場合、代わりに下記のファイルを require することで設定を省略できます。

# config/initialize/omniauth.rb
require 'oauth_adapter/omniauth'

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :developer unless Rails.env.production?
  provider :twitter, ENV['TWITTER_KEY'], ENV['TWITTER_SECRET']
  provider :github, ENV['GITHUB_KEY'], ENV['GITHUB_SECRET']
end

設定が済んだあとは OAuthAdapter.get_access_tokenメソッドによって 各 gem の AccessToken オブジェクトが取得できます。

OAuthAdapter.get_access_token(provider: :github, token: '<access_token>')
#=> #<OAuth2::AccessToken:0x007f9d763e5b50...
OAuthAdapter.get_access_token(provider: :twitter, token: '<access_token>', secret: '<token_secret>')
#=> #<OAuth::AccessToken:0x007f9d763d5430...

あとは、 AccessToken の get などのメソッドAPI を使えます。

token = OAuthAdapter.get_access_token(provider: :github, token: '<access_token>')
response = token.get 'user'
JSON.parse(resposne.body)
#=> {"login"=>"sinsoku", ...