OmniAuthを使って認証する際のキャンセル処理

表題の通りなのですが、Facebookの認証画面でキャンセルされると

OmniAuth::Strategies::OAuth2::CallbackError

の例外が発生します。

まぁ、キャンセルされることは少ないでしょうから放っておいても大丈夫な気がしますが、やっぱりかっこ悪い。対応してみましょう。


/config/initializers/omniauth.rbに次の文を追加

OmniAuth.config.on_failure = SessionsController.action(:oauth_failure)

※キャンセル時、SessionsControllerクラスのoauth_failureメソッドが呼ばれることを定義します。


で、コントローラ(/controllers/sessions_controller.rb)にoauth_failureメソッドを追加

class SessionsController < ApplicationController
  def oauth_failure
    flash[:notice] = "キャンセルしました。"
    redirect_to "/"
  end
end

※この例ではメッセージを設定して、指定URLにリダイレクトする処理を記述します。


RoRはこういうの楽でいいですねぇ。