表題の通りなのですが、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はこういうの楽でいいですねぇ。