概要
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がよしなにやってくれます。
前提
- omniauth-twitterを利用した環境
- mockではsham_rackを使っています (参考 : sham_rack使ってみた)
使い方
READMEを参考にしてください!!
twimockが具体的に何をやっているか
omniauth-twitterは、api.twitter.comと認証・リクエストトークンのやりとりを通して最終的にアクセストークン、ユーザー情報を取得します。
- api.twitter.comにリクエストしてrequest_tokenを取得する
- Twitterにブラウザでアクセスして認証・認可する
- 認証・認可画面を返す
- 認証・認可される == request_tokenとユーザー・アプリの紐付けが行われる
- api.twitter.comにリクエストして、request_tokenを元にaccess_tokenを取得する
- 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
今後の展望
どこまでできるかは分かりませんが、今思いついている限りを。
- twimockアプリ認可キャンセル時の動作
- 今はキャンセルボタンすらない
- facemockへの技術のフィードバック
- facemock-oauthはomniauth-facebookを通過させない作りになっている
- sham_rackを使って部分的なmockに改善
- twimock, facemockでまったく同じコードがあるので共通化して外に出したい
- エラーケースの充実
その他、使ってみた、こういう改善がほしいなどあれば是非コメントを!
pullreqもお待ちしてます。