Twitter連携を複数アプリで行う

2021/10/11に公開

想定している用途

twitterログインを利用してユーザーのサインインを行なっている場合
ログインとは別にもう一つTwitter連携(OAuth with the Twitter API)を使いたいユースケースが存在する

参考 OAuth with the Twitter API

前提

Ruby on Railsを使っている
'omniauth', 'omniauth-twitter' のgemを使っている

1つのWebサービスが、複数のアカウントでtwitterサービスと連携する。
要するにtwitterに対して1つのWebサービスが複垢を作るイメージ。

具体的にはどういうユースケースで?

「メールでお知らせ」の代わりにTwitterDMで通知などを利用したい
しかしTwitter連携の権限管理がガバいので、ログイン用の連携で大きな権限を要求したくない

なのでDM通知用のTwitterアプリ連携をもう1つ作ってしまう

なにをやる?

まずサービス名

サービス名は仮に yet_another_twitter としておく。
ログインに使っている方は twitter(デフォルト)

twitterにdeveloperとしてアプリ連携の情報を登録

ログインと同じやり方なのでここで困る人はいないと思うけど・・・
連携情報の取得方法は 公式情報 参照

config/initializers/omniauth.rb

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :twitter,
           TWITTER_CONSUMER_KEY,
           TWITTER_CONSUMER_SECRET
  provider OmniAuth::Strategies::Twitter,
           別のTWITTER_CONSUMER_KEY,
           別のTWITTER_CONSUMER_SECRET
           { name: :yet_another_twitter }
end

coufig/routes.rb

routingを追加

get '/auth/yet_another_twitter/callback', to: 'sessions/yet_another_twitter#callback'

当然SessionControllerにも該当処理を実装すること

認証情報を保管するmodelを作る

以下の3つがあればいいんじゃない?

  • uid
  • access_token
  • access_token_secret

Discussion