FIX: For a single authenticator, do not interrupt registration flow

Followup to 0a14b9b42a
This commit is contained in:
David Taylor 2019-11-19 19:15:11 +00:00
parent 565a967192
commit 46841888b7
2 changed files with 43 additions and 2 deletions

View File

@ -722,8 +722,9 @@ class ApplicationController < ActionController::Base
session[:destination_url] = destination_url
redirect_to path('/session/sso')
return
elsif !SiteSetting.enable_local_logins && Discourse.enabled_authenticators.length == 1
# Only one authentication provider, direct straight to it
elsif !SiteSetting.enable_local_logins && Discourse.enabled_authenticators.length == 1 && !cookies[:authentication_data]
# Only one authentication provider, direct straight to it.
# If authentication_data is present, then we are halfway though registration. Don't redirect offsite
cookies[:destination_url] = destination_url
redirect_to path("/auth/#{Discourse.enabled_authenticators.first.name}")
else

View File

@ -44,6 +44,46 @@ RSpec.describe ApplicationController do
get "/"
expect(response).to redirect_to("/login")
end
context "with omniauth in test mode" do
before do
OmniAuth.config.test_mode = true
OmniAuth.config.add_mock(:google_oauth2,
info: OmniAuth::AuthHash::InfoHash.new(
email: "address@example.com",
),
extra: {
raw_info: OmniAuth::AuthHash.new(
email_verified: true,
email: "address@example.com",
)
}
)
Rails.application.env_config["omniauth.auth"] = OmniAuth.config.mock_auth[:google_oauth2]
end
after do
Rails.application.env_config["omniauth.auth"] = OmniAuth.config.mock_auth[:google_oauth2] = nil
OmniAuth.config.test_mode = false
end
it "should not redirect to authenticator if registration in progress" do
SiteSetting.enable_local_logins = false
SiteSetting.enable_google_oauth2_logins = true
get "/"
expect(response).to redirect_to("/auth/google_oauth2")
expect(cookies[:authentication_data]).to eq(nil)
get "/auth/google_oauth2/callback.json"
expect(response).to redirect_to("/")
expect(cookies[:authentication_data]).not_to eq(nil)
get "/"
expect(response).to redirect_to("/login")
end
end
end
describe '#redirect_to_second_factor_if_required' do