LoginSignup
1
0

More than 3 years have passed since last update.

Gem 'omniauth-google-oauth2'を使って、認証機能を実装する時にエラー!!「The action 'google_oauth2' could not be found for Devise::OmniauthCallbacksController」

Last updated at Posted at 2021-02-15

こちらの記事に参考にGoogleアカウントでの認証を実装していました。
https://qiita.com/yuki_0920/items/003d8b1c73352378188d

実際の画面でも、RSpecのテストでも下記のエラーに結構苦戦したので、残しておく。

前提条件

環境

Docker
Rails 6.0.3
MySQL
devise
omniauth
omniauth-google-oauth2

The action 'google_oauth2' could not be found for Devise::OmniauthCallbacksController

スクリーンショット 2021-02-15 20.56.51.png

コントローラーやモデル、ルーティングの設定が終わり、View上に「Sign in with GoogleOauth2」の自動リンクが作成され、いざ認証をテストすると、

このエラー・・・
Devise::OmniauthCallbacksControllerには「google_oauth2」というアクションは見つからないよ

と返ってきます。

結論

routes.rbを確認しよう!!

今回の実装方法ではDevise::OmniauthCallbacksControllerを継承したUsers::OmniauthCallbacksControllerに「google_oauth2」を定義しているので、

コントローラーへのルーティングがミスっているということは検討はついていた。

どこにも間違いはないのに・・・
はい。間違っていました。

#間違い
devise_for :users, controller: {
    :registrations => 'users/registrations',
    :sessions => 'users/sessions',
    :omniauth_callbacks => 'users/omniauth_callbacks'
  }

#正解
devise_for :users, controllers: {
    :registrations => 'users/registrations',
    :sessions => 'users/sessions',
    :omniauth_callbacks => 'users/omniauth_callbacks'
  }

controllerが単数形になっていたことが原因でした。

おまけ

エラー解決にあたり、グーグルのクライアントIDやシークレットキーや環境変数の入力間違いでこうなっているのでは?とかも考えました。
実際は違ったわけですが、その場合のエラーも一応残しておきます。

「Sign in with GoogleOauth2」のリンクをクリックした時点で「承認エラー」がでます。

スクリーンショット 2021-02-15 21.06.53.png

もしこの部分が間違っていて、.envファイルを修正した場合はdocker-compose up しなおさないとダメです。

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