From 6883b5cf8e54516d9714eb48f714fa0f7ae2bd13 Mon Sep 17 00:00:00 2001 From: root Date: Tue, 15 Oct 2024 22:36:07 -0400 Subject: [PATCH] Troubleshooting sso issue with logging. --- .../users/omniauth_callbacks_controller.rb | 14 ++++-- app/models/user.rb | 46 +++++++++++++------ config/initializers/devise.rb | 1 - 3 files changed, 42 insertions(+), 19 deletions(-) diff --git a/app/controllers/users/omniauth_callbacks_controller.rb b/app/controllers/users/omniauth_callbacks_controller.rb index d013ef632..5329dbd53 100644 --- a/app/controllers/users/omniauth_callbacks_controller.rb +++ b/app/controllers/users/omniauth_callbacks_controller.rb @@ -1,26 +1,27 @@ class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController def office365 + log_omniauth_data check_omniauth_auth end def google_oauth2 + log_omniauth_data check_omniauth_auth end def keycloak_openid - # Rails.logger.debug "OmniAuth auth data: #{request.env['omniauth.auth'].inspect}" - # Rails.logger.debug "Request environment: #{request.env.inspect}" - # Rails.logger.debug "Incoming request parameters: #{params.inspect}" - # session[:keycloakstate] = request.env["omniauth.auth"]["uid"] + log_omniauth_data check_omniauth_auth end def oauth2 + log_omniauth_data @user = User.from_omniauth(request.env["omniauth.auth"]) sign_in_and_redirect @user, event: :authentication set_flash_message(:notice, :success, kind: "OAuth2") if is_navigational_format? check_omniauth_auth + end def okta @@ -41,6 +42,11 @@ def failure redirect_to after_omniauth_failure_path_for(resource_name) end + def log_omniauth_data + Rails.logger.debug "OmniAuth auth data: #{request.env['omniauth.auth'].inspect}" + Rails.logger.debug "Request environment: #{request.env.inspect}" + end + private def check_omniauth_auth diff --git a/app/models/user.rb b/app/models/user.rb index 2302af0e2..0881a181f 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -398,23 +398,41 @@ def preference_url url end + # def self.from_omniauth(auth) + # if where(email: auth.info.email || "#{auth.uid}@#{auth.provider}.com").present? + # where(email: auth.info.email || "#{auth.uid}@#{auth.provider}.com").first do |user| + # user.provider = auth.provider + # user.uid = auth.uid + # user.first_name = auth.info.first_name rescue nil + # user.last_name = auth.info.last_name rescue nil + # user.email = auth.info.email || "#{auth.uid}@#{auth.provider}.com" + # user.login = auth.info.email || "#{auth.uid}@#{auth.provider}.com" + # user.first_name ||= user.login + # user.last_name ||= user.login + # user.password = Devise.friendly_token[0, 20] + # end + # else + # nil + # end + # end + def self.from_omniauth(auth) - if where(email: auth.info.email || "#{auth.uid}@#{auth.provider}.com").present? - where(email: auth.info.email || "#{auth.uid}@#{auth.provider}.com").first do |user| - user.provider = auth.provider - user.uid = auth.uid - user.first_name = auth.info.first_name rescue nil - user.last_name = auth.info.last_name rescue nil - user.email = auth.info.email || "#{auth.uid}@#{auth.provider}.com" - user.login = auth.info.email || "#{auth.uid}@#{auth.provider}.com" - user.first_name ||= user.login - user.last_name ||= user.login - user.password = Devise.friendly_token[0, 20] - end - else - nil + user = where(email: auth.info.email || "#{auth.uid}@#{auth.provider}.com").first_or_initialize do |user| + user.provider = auth.provider + user.uid = auth.uid + user.first_name = auth.info.first_name if auth.info.first_name.present? + user.last_name = auth.info.last_name if auth.info.last_name.present? + user.email = auth.info.email || "#{auth.uid}@#{auth.provider}.com" + user.login = auth.info.email || "#{auth.uid}@#{auth.provider}.com" + user.first_name ||= user.login + user.last_name ||= user.login + user.password = Devise.friendly_token[0, 20] if user.new_record? end + + user.save if user.changed? + user end + def password_complexity return unless self.changes.has_key?("password") diff --git a/config/initializers/devise.rb b/config/initializers/devise.rb index 97becad10..e00763d94 100644 --- a/config/initializers/devise.rb +++ b/config/initializers/devise.rb @@ -282,7 +282,6 @@ }, scope: [:openid, :profile, :email], :strategy_class => OmniAuth::Strategies::KeycloakOpenId - # redirect_uri: "https://mpath-qa.microhealthllc.com/auth/keycloak/callback" ) config.omniauth( :oauth2,