Rails5 Google認証導入時のエラー

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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/420303/c84a212f-11be-082d-f610-aca1d53e22e5.png)
[Using OAuth 2.0 to Access Google APIs](https://developers.google.com/identity/protocols/oauth2?csw=1)
エラー
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']
```
余計なものが書かれちゃっていたみたいです。。。

##反省点
エラー該当コードの書かれている意味を理解していなかった。
[公式ドキュメント](https://github.com/zquestz/omniauth-google-oauth2)ちゃんと読んでいなかった。
##※補足(11/12編集)

```config/initializers/omniauth.rb
Rails.application.config.middleware.use OmniAuth::Builder do
  {:provider_ignores_state => true}
end
```
このコードはかえってCSRF攻撃を受けやすくなってしまうため不要。