Devise+OmniAuthで直接Googleのログイン画面を表示する方法

DeviseとOmniAuthでGoogleアカウントと連携するアプリケーションを開発しています。Deviseでは認証が要求される場合には、Deviseのログイン画面が開きます。しかし、Googleのアカウントのみと連携するアプリケーションであれば、直接Googleのログイン画面を表示させたほうがシンプルになります。

以下の情報を参考にして設定することができました。

stackoverflow.com

qiita.com

  • config/initializer/devise.rb
# ==> Warden configuration
# If you want to use other strategies, that are not supported by Devise, or
# change the failure app, you can configure them inside the config.warden block.
#
# config.warden do |manager|
#   manager.intercept_401 = false
#   manager.default_strategies(scope: :user).unshift :some_external_strategy
# end
config.warden do |manager|
  manager.failure_app = CustomAuthenticationFailure
end

リダイレクト先にGoogleのログインページにリダイレクトするパスを指定します。

  • lib/custom_authentication_failure.rb
class CustomAuthenticationFailure < Devise::FailureApp
  protected
  def redirect_url
    user_google_omniauth_authorize_path
  end
end

libディレクトリ以下のファイルをロードするように設定します。

  • config/application.rb
config.autoload_paths += %W(#{config.root}/lib)

これらの設定で、これまでDeviseのログイン画面を表示していた処理が、直接Googleのログイン画面を表示するようになりました。