投稿

omniauthのTwitterプロバイダーのoptionsを動的に変更する

omniauthのTwitterプロバイダーのoptionsを動的に変更する

omniauthでTwitter連携を使う際、consumer_key/secretをアプリ全体で固定せず、リクエストごとに動的に切り替えたいときに使う(マルチテナントでサブドメインごとに別のTwitterアプリキーを持たせるケースなど)。setup: SETUP_PROC を指定すると、認証開始時にomniauthがこのProcを呼び出し、env['omniauth.strategy'].options を書き換えてから実際の認証処理に進む。

SETUP_PROC = lambda do |env| 
  request = Rack::Request.new(env)
  user = User.find_by_subdomain(request.subdomain)
  env['omniauth.strategy'].options[:client_id] = user.consumer_key          # if using omniauth-oauth2
  env['omniauth.strategy'].options[:client_secret] = user.consumer_secret   # if using omniauth-oauth2
  env['omniauth.strategy'].options[:consumer_key] = user.consumer_key       # if using omniauth-oauth
  env['omniauth.strategy'].options[:consumer_secret] = user.consumer_secret # if using omniauth-oauth
end
   
use OmniAuth::Builder.new do
  provider :twitter,
           setup: SETUP_PROC,
           callback_path: "/path/to/callback",
           image_size: "original"
end

Setup Phase · omniauth/omniauth Wiki · GitHub