LoginSignup
0
0

More than 3 years have passed since last update.

Rails5 Google認証導入時のエラー

Last updated at Posted at 2020-11-10

deviseでgoogle認証を導入した際のエラーと解決までの流れを忘却録として残します。
エラー 400: invalid_request Missing required parameter: client_id
↑のエラー記事は見かけるのですが、それとは違うエラーだったので苦戦しました。

認証エラー

ブラウザで新規登録画面でSign in with GoogleOauth2が追加されていることを確認。
リンクに飛ぶと以下のエラーが出た。

log/development.log
# gem 'omniauth-rails_csrf_protection' 追加前

(google_oauth2) Callback phase initiated.
(google_oauth2) Authentication failure! csrf_detected: OmniAuth::Strategies::OAuth2::CallbackError, csrf_detected | CSRF detected
Processing by Users::OmniauthCallbacksController#failure as HTML
Redirected to http://localhost:3000/users/sign_in
Completed 302 Found in 2ms (ActiveRecord: 0.0ms)

gem 'omniauth-rails_csrf_protection'を入れたら以下のログに変わっていた。

log/development.log
# gem 'omniauth-rails_csrf_protection' 追加後

Started POST "/users/auth/google_oauth2" for ::1 at 2020-11-10 11:59:32 +0900
(google_oauth2) Request phase initiated.

スクリーンショット 2020-11-03 19.14.34.png
Using OAuth 2.0 to Access Google APIs
エラー
400: invalid_request
エラー内容を直訳
「redirect_uriの無効なパラメーター値:スキームがありません:/ users / auth / google_oauth2 / callback」

やったこと

  • gem 'omniauth-rails_csrf_protection' 追加
  • Contacts API 有効にする
  • gem 'dotenv-rails'に , require: 'dotenv/rails-now'を後述する
  • config/initializers/omniauth.rb作成,編集(※最後のほうに補足有り)
config/initializers/omniauth.rb
Rails.application.config.middleware.use OmniAuth::Builder do
  {:provider_ignores_state => true}
end

解決結果とその要因

google認証できました!(deviseのみのログインもOK!)
以下はその際のログです

development.log.rb

Started POST "/users/auth/google_oauth2" for ::1 at 2020-11-10 13:24:48 +0900
(google_oauth2) Request phase initiated.
Started GET "/users/auth/google_oauth2/callback?state=9d59b2ef8ca58e1b5f3ceec217cf860863ac548150829df6&code=4%2F0AY0e-g6FAjat7NwD37kS0-qHTDAs3JDPF4fW_SxnloikU9WVpy_oHNDYU3Rn3t07LRm7XQ&scope=email+profile+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.profile+openid&authuser=0&prompt=consent" for ::1 at 2020-11-10 13:31:31 +0900
(google_oauth2) Callback phase initiated.
Processing by Users::OmniauthCallbacksController#google_oauth2 as HTML
  Parameters: {"state"=>"9d59b2ef8ca58e1b5f3ceec217cf860863ac548150829df6", "code"=>"4/0AY0e-g6FAjat7NwD37kS0-qHTDAs3JDPF4fW_SxnloikU9WVpy_oHNDYU3Rn3t07LRm7XQ", "scope"=>"email profile https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile openid", "authuser"=>"0", "prompt"=>"consent"}
  User Load (5.3ms)  SELECT  `users`.* FROM `users` WHERE `users`.`email` = '登録アドレス' ORDER BY `users`.`id` ASC LIMIT 1
   (1.8ms)  BEGIN
  User Exists (5.9ms)  SELECT  1 AS one FROM `users` WHERE `users`.`email` = BINARY '登録アドレス' LIMIT 1
  SQL (10.1ms)  INSERT INTO `users` (`email`, `encrypted_password`, `created_at`, `updated_at`, `name`) VALUES ('登録アドレス', '$2a$12$StAlV8i5S0/ORaZ9DNDPD.6MJaEqY3JGvkIwQb4hulRH5wLazHylm', '2020-11-10 04:31:32', '2020-11-10 04:31:32', '名前')
   (6.1ms)  COMMIT
Redirected to http://localhost:3000/
Completed 302 Found in 504ms (ActiveRecord: 29.2ms)

解決要因

initializerのdeviseファイルのコードを編集したらエラーが解消されました。

initializers/devise.rb
config.omniauth :google_oauth2,ENV['GOOGLE_CLIENT_ID'],
                               ENV['GOOGLE_CLIENT_SECRET'], 
                               scope: 'email,calendar', 
                               redirect_uri: "#{ENV['HOST_DOMAIN']}/users/auth/google_oauth2/callback"

↓変更後↓

initializers/devise.rb
config.omniauth :google_oauth2,ENV['GOOGLE_CLIENT_ID'],
                               ENV['GOOGLE_CLIENT_SECRET']

余計なものが書かれちゃっていたみたいです。。。

反省点

エラー該当コードの書かれている意味を理解していなかった。
公式ドキュメントちゃんと読んでいなかった。

※補足(11/12編集)

config/initializers/omniauth.rb
Rails.application.config.middleware.use OmniAuth::Builder do
  {:provider_ignores_state => true}
end

このコードはかえってCSRF攻撃を受けやすくなってしまうため不要。

0
0
2

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