Add an option to automatically sign-in with an Omniauth provider without showing the GitLab sign-in page
This is useful when integrating with existing SSO environments and we want to use a single Omniauth provider for all user authentication.
This commit is contained in:
parent
a3b60982e5
commit
5491f6fbde
5 changed files with 25 additions and 0 deletions
|
@ -34,6 +34,7 @@ v 7.12.0 (unreleased)
|
||||||
- You can not remove user if he/she is an only owner of group
|
- You can not remove user if he/she is an only owner of group
|
||||||
- User should be able to leave group. If not - show him proper message
|
- User should be able to leave group. If not - show him proper message
|
||||||
- User has ability to leave project
|
- User has ability to leave project
|
||||||
|
- Add an option to automatically sign-in with an Omniauth provider
|
||||||
|
|
||||||
v 7.11.4
|
v 7.11.4
|
||||||
- Fix missing bullets when creating lists
|
- Fix missing bullets when creating lists
|
||||||
|
|
|
@ -2,6 +2,7 @@ class SessionsController < Devise::SessionsController
|
||||||
include AuthenticatesWithTwoFactor
|
include AuthenticatesWithTwoFactor
|
||||||
|
|
||||||
prepend_before_action :authenticate_with_two_factor, only: [:create]
|
prepend_before_action :authenticate_with_two_factor, only: [:create]
|
||||||
|
before_action :auto_sign_in_with_provider, only: [:new]
|
||||||
|
|
||||||
def new
|
def new
|
||||||
redirect_path =
|
redirect_path =
|
||||||
|
@ -75,6 +76,21 @@ class SessionsController < Devise::SessionsController
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def auto_sign_in_with_provider
|
||||||
|
provider = Gitlab.config.omniauth.auto_sign_in_with_provider
|
||||||
|
return unless provider.present?
|
||||||
|
|
||||||
|
# Auto sign in with an Omniauth provider only if the standard "you need to sign-in" alert is
|
||||||
|
# registered or no alert at all. In case of another alert (such as a blocked user), it is safer
|
||||||
|
# to do nothing to prevent redirection loops with certain Omniauth providers.
|
||||||
|
return unless flash[:alert].blank? || flash[:alert] == I18n.t('devise.failure.unauthenticated')
|
||||||
|
|
||||||
|
# Prevent alert from popping up on the first page shown after authentication.
|
||||||
|
flash[:alert] = nil
|
||||||
|
|
||||||
|
redirect_to omniauth_authorize_path(:user, provider.to_sym)
|
||||||
|
end
|
||||||
|
|
||||||
def valid_otp_attempt?(user)
|
def valid_otp_attempt?(user)
|
||||||
user.valid_otp?(user_params[:otp_attempt]) ||
|
user.valid_otp?(user_params[:otp_attempt]) ||
|
||||||
user.invalidate_otp_backup_code!(user_params[:otp_attempt])
|
user.invalidate_otp_backup_code!(user_params[:otp_attempt])
|
||||||
|
|
|
@ -182,6 +182,10 @@ production: &base
|
||||||
# Allow login via Twitter, Google, etc. using OmniAuth providers
|
# Allow login via Twitter, Google, etc. using OmniAuth providers
|
||||||
enabled: false
|
enabled: false
|
||||||
|
|
||||||
|
# Uncomment this to automatically sign in with a specific omniauth provider's without
|
||||||
|
# showing GitLab's sign-in page (default: show the GitLab sign-in page)
|
||||||
|
# auto_sign_in_with_provider: saml
|
||||||
|
|
||||||
# CAUTION!
|
# CAUTION!
|
||||||
# This allows users to login without having a user account first (default: false).
|
# This allows users to login without having a user account first (default: false).
|
||||||
# User accounts will be created automatically when authentication was successful.
|
# User accounts will be created automatically when authentication was successful.
|
||||||
|
|
|
@ -87,6 +87,8 @@ end
|
||||||
|
|
||||||
Settings['omniauth'] ||= Settingslogic.new({})
|
Settings['omniauth'] ||= Settingslogic.new({})
|
||||||
Settings.omniauth['enabled'] = false if Settings.omniauth['enabled'].nil?
|
Settings.omniauth['enabled'] = false if Settings.omniauth['enabled'].nil?
|
||||||
|
Settings.omniauth['auto_sign_in_with_provider'] = false if Settings.omniauth['auto_sign_in_with_provider'].nil?
|
||||||
|
|
||||||
Settings.omniauth['providers'] ||= []
|
Settings.omniauth['providers'] ||= []
|
||||||
|
|
||||||
Settings['issues_tracker'] ||= {}
|
Settings['issues_tracker'] ||= {}
|
||||||
|
|
|
@ -12,6 +12,8 @@ if Gitlab::LDAP::Config.enabled?
|
||||||
end
|
end
|
||||||
|
|
||||||
OmniAuth.config.allowed_request_methods = [:post]
|
OmniAuth.config.allowed_request_methods = [:post]
|
||||||
|
#In case of auto sign-in, the GET method is used (users don't get to click on a button)
|
||||||
|
OmniAuth.config.allowed_request_methods << :get if Gitlab.config.omniauth.auto_sign_in_with_provider.present?
|
||||||
OmniAuth.config.before_request_phase do |env|
|
OmniAuth.config.before_request_phase do |env|
|
||||||
OmniAuth::RequestForgeryProtection.new(env).call
|
OmniAuth::RequestForgeryProtection.new(env).call
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue