🐥
omniauth 連携キャンセルした時にリダイレクトさせる
omniauth を使用して、サードパーティログインを実装すると、各サードパーティの OAuth 画面(連携認証画面)でキャンセルしたときに、リダイレクト先を設定していないとエラーが発生してしまいます。なので、リダイレクトを設定しておく必要があります。
今回は Facebook を例に紹介していきます。
環境
- Ruby 2.3.1
- Ruby on Rails 4.2.7.1
- omniauth 1.9.1
- omniauth-facebook 7.0.0
エラー内容
リダイレクト先を設定しないとエラーが発生します。
- 「Facebook でログイン」ボタンを押下(Facebook と連携させるリンクボタン)
- OAuth 画面(連携認証画面)で「後で」もしくは「キャンセル」ボタンを押下
- エラーが発生する
- エラー内容
omniauth: (facebook) Authentication failure! invalid_credentials: OmniAuth::Strategies::OAuth2::CallbackError, csrf_detected | CSRF detected
解決策
[config/initializers/omniauth.rb]にリダイレクト先を追記
下記では、リダイレクト先にトップページを指定している。
Rails.application.config.middleware.use OmniAuth::Builder do
...
on_failure do |env|
Web::TopController.action(:index).call(env)
end
end
これにより、先ほどの Facebook の OAuth 画面(連携認証画面)で「後で」もしくは「キャンセル」ボタンを押下したときに、トップページへ遷移することができます。
この設定は、omniauth-facebook だけではなく、omniauth 共有の設定であるため、他のサードパーティ(Twitter, Yahoo など)でも認証をキャンセルしたときに、同様なリダイレクトが実行されます。
Discussion