Google認証のエラーを解消したいです。
以下のエラーをと同じ状況の記事が見つからず、(英語の記事を見つけたが、よく理解できませんでした)苦戦しています。ご教授のほどよろしくお願いいたします。
ruby on railsでアプリを作っているのですが、ログイン機能にdeviseを導入し、google認証も追加しようとした際にエラーが出ました。deviseのみのログイン機能は正常に機能しています。
[開発環境]
Mac OS 10.15.7
Rails 5.1.5
devise version指定なし
発生している問題・エラーメッセージ
#development.log Started POST "/users/auth/google_oauth2" for ::1 at 2020-11-09 14:51:04 +0900 (google_oauth2) Request phase initiated.
該当のソースコード
app/controllers/users/omniauth_callbacks_controller.rb
ruby
1 2class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController 3 # You should configure your model like this: 4 # devise :omniauthable, omniauth_providers: [:twitter] 5 6 def google_oauth2 7 @user = User.from_omniauth(request.env['omniauth.auth']) 8 9 if @user.persisted? 10 flash[:notice] = I18n.t 'devise.omniauth_callbacks.success', kind: 'Google' 11 sign_in_and_redirect @user, event: :authentication 12 else 13 session['devise.google_data'] = request.env['omniauth.auth'].except(:extra) 14 redirect_to new_user_registration_url, alert: @user.errors.full_messages.join("\n") 15 end 16 end 17end
app/models/user.rb
ruby
1class User < ApplicationRecord 2 # Include default devise modules. Others available are: 3 # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable 4 devise :database_authenticatable, :registerable, 5 :recoverable, :rememberable, :validatable, 6 :omniauthable, omniauth_providers: %i[google_oauth2] 7 8 protected 9 # コールバックを受けた時にユーザが既にアプリケーションの中で認知されているかどうかを判断する 10 def self.from_omniauth(access_token) 11 data = access_token.info 12 user = User.where(email: data['email']).first 13 # ユーザーがいない場合は作成する 14 unless user 15 user = User.create(name: data['name'], 16 email: data['email'], 17 password: Devise.friendly_token[0,20]) 18 end 19 user 20 end 21end
config/routes.rb
Rails.application.routes.draw do root to: "homes#index" devise_for :users, controllers: { sessions: 'users/sessions', registrations: "users/registrations", omniauth_callbacks: 'users/omniauth_callbacks' } resources :users, only: [:index] resources :reviews end
試したこと
- gem 'omniauth-rails_csrf_protection' 追加
- nameカラムを追加
- Contacts API 有効にする
- google設定した際のクライアントIDとシークレットIDは
gem 'dotenv-rails'
を用いて、.env
に記載してます。 - config/initializers/omniauth.rb作成,編集
config/initializers/omniauth.rb
1Rails.application.config.middleware.use OmniAuth::Builder do 2 {:provider_ignores_state => true} 3end
補足情報(FW/ツールのバージョンなど)
gem 'omniauth-rails_csrf_protection'
を追加する前は、このようなログが出ていました。
log/development.log (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)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。