0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Google認証失敗】条件付きバリデーション

Posted at

1 はじめに

以下の画像のようにGoogle認証を取り入れており、以下の画像までは実行できるのですが、アカウントを選択して実行してもうまくログインできなくなるという現象が起こりました。これを解決するのに少し時間がかかったので、備忘録として投稿します。

2025-01-19 17.42の画像.jpg

2 解決のための流れ

  • Google Cloud Consoleでのプロジェクト及びリダイレクトURLの確認
  • OAuth レート上限の確認
  • Rails側でデバッグ

上記の流れで確認していきました。

Google Cloud Consoleでのプロジェクト及びリダイレクトURLの確認

まずは、Google Cloud Consoleにログインをして自分が作成したプロジェクトを間違えて消していないか。次にリダイレクトURLが間違えていないか確認しました。
ここでの発見はリダイレクトURLではhttp://localhost:3000のように設定しているので、自分でアプリ作成のために作成したルーティングのhttp://localhost:3000/usersなども必要に応じて追加する必要があるなと感じました。毎回ログインするときにトップ画面に戻るのは手間なので。

今回はこちらには何の問題もありませんでした。

OAuth レート上限の確認

一応問題ないとは思いますが、まさかと思い確認しました(私の場合はYoutube apiも使用しているため)。今の私のアプリの内容的に、上限にいくはずもなく問題ありませんでした。
正直ここで詰まってしまい、次に何を確認すれば良いのかわからなくなり、ChatGptに解決する手段を聞いてみました。それが次の手段です。

Rails側でデバッグ

users/omniauth_callbacks_controller.rb
Rails.logger.debug "OmniAuth response: #{request.env['omniauth.auth'].inspect}"

上記のコードを追記してあげることで、OmniAuthレスポンスの内容を確認できることがわかったので、実施してみました。簡単にこのコードの説明をするとrequest.env['omniauth.auth']の中にGoogle認証した時のデータが入っているのでその中身について確認するためのコードです。

上記のコードを追加して、Google認証を実施した結果として、しっかりとデータが取得できていることがわかりました。つまりデータは取得できているが、最後にテーブルにデータを保存することができていないことが、ここで発見されました。

これをみた時に、まさかと思い出したのですが、Google認証をした後に、users/editにパスが飛ぶようにしており、そこではユーザーの他のデータを追加させようとしていたことを思い出しました。そして追加のデータにバリデーションをつけていたので、バリデーションをしていない、Google認証のデータは取得できなかったのです。

問題の解決

Google認証した後に、バリデーションが機能するようにしようと思います。
そのために調べたところ、条件付きバリデーションがあったので、こちらを参考にして以下の記述を追記をしました。

user.rb
  with_options if: :google_auth? do |auth|
    auth.validates :name, presence: true, length: { maximum: 15 }
    auth.validates :profile, presence: true, length: { maximum: 100 }
    auth.validates :muscle_training_history, numericality: { only_integer: true, greater_than_or_equal_to: 0, message: "数字を入力してください" }
  end

  private

  def google_auth?
    provider == 'google_oauth2'
  end

with_options if: :google_auth?の部分で、もしgoogle_auth?が正しければ実行するという記述になっており、google_auth?は下の方に作成しております。Google認証したときには、providerカラムは'google_oauth2'になるはずなので、この記述でうまくいきます。

おわりに

今回は思わぬところでGoogle認証ができなくなりましたが、そのおかげで条件付きバリデーションを勉強できたのでよかったです。これからもポートフォリオ完成に向けて精進していきます。最後まで閲覧いただき誠にありがとうございました。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?