LoginSignup
7
7

More than 5 years have passed since last update.

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

Last updated at Posted at 2014-09-11

概要

Facebookとの通信をmockするgemを作ってみたの続き。
FacebookとのOAuthをMockするfacemock-oauthというgemを作ったので紹介。

背景・目的

device + omniauth (omniauth-facebook)でやっているOAuthをMockに差し替えられるようにしたかった。
具体的には、

  • devise, omniauthの処理を通過しない
  • facemockを使って事前にユーザ登録をしておき、そのユーザでログイン出来る

ようにしたい。

要素技術

  • ruby (2.1.1, 2.1.0, 2.0.0, 1.9.3)
  • gem (versionはそれぞれ最新を使用)
    • rspec
    • simplecov
    • rack

方針

omniauth, deviseが処理する前にmockでhookして処理させる。
Facebookのログイン画面に相当する画面をmockで返し、認証させる。

deviseとomniauthを使ったFacebookとのOAuthの詳細は多数記事があると思うので詳細は割愛。

ざっくりとした流れ

  1. WebアプリからFacebookログイン画面へリダイレクトさせる
  2. Facebookログイン画面が返る
  3. Facebookで認証・認可する
  4. WebアプリへCallbackされる
  5. Callbackで受け取ったAuthorization Codeからアクセストークンを取得する
  6. アクセストークンを使ってユーザ情報を取得
  7. ユーザ情報からAuthHashを生成し、ヘッダに載せてCallback用のWebアプリのメソッドを呼ぶ

mockでの流れ

  1. WebアプリからFacebookログイン画面へのリダイレクトをhookして、mockのログイン画面へリダイレクトさせる
  2. mockのログイン画面を返す
  3. mockで認証する
  4. mockでAuthorization Codeを発行・付与して、WebアプリへCallbackさせる
  5. CallbackをhookしてAuthorizaton Codeを元にアクセストークンを取得する
  6. アクセストークンを使ってユーザ情報を取得
  7. ユーザ情報からAuthHashを生成し、ヘッダに載せてCallback用のWebアプリのメソッドを呼ぶ

実現方法

4つのRackミドルウェアを作成して実現する。

  1. ログイン画面へのリダイレクトをhookしてmockに流すRackミドルウェア
  2. ログイン画面を返すRackミドルウェア
  3. 認証・WebアプリへのCallbackを実現するRackミドルウェア
  4. WebアプリへのCallbackをhookするRackミドルウェア

やったこと

作ったもの

使い方

READMEを参照

付けたバッジ

facemockと同じ。

参考

7
7
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
7
7