diff --git a/app/controllers/users/omniauth_callbacks_controller.rb b/app/controllers/users/omniauth_callbacks_controller.rb index 53da9f19..e2bbb362 100644 --- a/app/controllers/users/omniauth_callbacks_controller.rb +++ b/app/controllers/users/omniauth_callbacks_controller.rb @@ -2,13 +2,22 @@ class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController def github + handle_auth('GitHub') + end + + def google_oauth2 + handle_auth('Google') + end + + private + + def handle_auth(provider) @user = User.from_omniauth(request.env['omniauth.auth']) if @user.persisted? - flash[:notice] = I18n.t 'devise.omniauth_callbacks.success', kind: 'GitHub' + flash[:notice] = I18n.t 'devise.omniauth_callbacks.success', kind: provider sign_in_and_redirect @user, event: :authentication else - session['devise.github_data'] = request.env['omniauth.auth'].except('extra') redirect_to new_user_registration_url, alert: @user.errors.full_messages.join("\n") end end diff --git a/app/models/user.rb b/app/models/user.rb index 9329f130..56a754bb 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -4,7 +4,7 @@ class User < ApplicationRecord # rubocop:disable Metrics/ClassLength include UserFamily devise :database_authenticatable, :registerable, :recoverable, :rememberable, :validatable, :trackable, - :omniauthable, omniauth_providers: %i[github] + :omniauthable, omniauth_providers: %i[github google_oauth2] has_many :points, dependent: :destroy has_many :imports, dependent: :destroy diff --git a/config/initializers/devise.rb b/config/initializers/devise.rb index 30bb1a73..19a30c97 100644 --- a/config/initializers/devise.rb +++ b/config/initializers/devise.rb @@ -266,6 +266,8 @@ Devise.setup do |config| # Add a new OmniAuth provider. Check the wiki for more information on setting # up on your models and hooks. config.omniauth :github, ENV['GITHUB_OAUTH_CLIENT_ID'], ENV['GITHUB_OAUTH_CLIENT_SECRET'], scope: 'user:email' + config.omniauth :google_oauth2, ENV['GOOGLE_OAUTH_CLIENT_ID'], ENV['GOOGLE_OAUTH_CLIENT_SECRET'], + scope: 'userinfo.email,userinfo.profile' # ==> Warden configuration # If you want to use other strategies, that are not supported by Devise, or