LoginSignup
11
10

More than 5 years have passed since last update.

TwitterとのOAuthをmockするgemを作ってみた

Posted at

概要

FacebookとのOAuthをmockするgemを作ってみたのTwitter版です。
twimock といいます。

twimockは以下のようにすることで、Twitterとのやりとりをmockに置き換えます。

  • omniauth-twitterから叩くapi.twitter.comのAPIをsham_rackを使ってmockに
  • omniauth-twitterからTwitterログイン画面へのリダイレクトを、mockの画面に

やりとりを奪えればこっちのもの。あとはtwitterとのoauthの流れに則ってtwimockがよしなにやってくれます。

前提

使い方

READMEを参考にしてください!!

twimockが具体的に何をやっているか

omniauth-twitterは、api.twitter.comと認証・リクエストトークンのやりとりを通して最終的にアクセストークン、ユーザー情報を取得します。

  1. api.twitter.comにリクエストしてrequest_tokenを取得する
  2. Twitterにブラウザでアクセスして認証・認可する
    • 認証・認可画面を返す
    • 認証・認可される == request_tokenとユーザー・アプリの紐付けが行われる
  3. api.twitter.comにリクエストして、request_tokenを元にaccess_tokenを取得する
  4. api.twitter.comにリクエストして、ユーザー情報を取得する

このうち、1,3,4をsham_rackでmockして、2で呼び出す画面やAPIをサーバーアプリのrackミドルウェアに組み込むこむことで、twitterのmockを実現しています。
1から2へのリダイレクトは、omniauth-twitterにリダイレクト先を設定できないので、twimockからモンキーパッチを当てています。

図にすると、以下のようになります。
(実際にはtwimockはサーバーアプリ内にいますが、twitterの立ち位置として描いてます。)

図内の用語補足

  • RT : Request Token
  • CK : Consumer Key
  • AT : Access Token

IMG_2901.jpg

今後の展望

どこまでできるかは分かりませんが、今思いついている限りを。

  • twimockアプリ認可キャンセル時の動作
    • 今はキャンセルボタンすらない
  • facemockへの技術のフィードバック
    • facemock-oauthはomniauth-facebookを通過させない作りになっている
    • sham_rackを使って部分的なmockに改善
    • twimock, facemockでまったく同じコードがあるので共通化して外に出したい
  • エラーケースの充実

その他、使ってみた、こういう改善がほしいなどあれば是非コメントを!
pullreqもお待ちしてます。

11
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
10