mirror of
https://github.com/discourse/discourse.git
synced 2025-06-04 04:36:05 +08:00
FEATURE: Automatically redirect to authenticator when there is only one
This brings the behavior in line with native Discourse SSO. If login is required, and a user tries to visit the forum, they will be directed straight to the external login page without requiring any clicks.
This commit is contained in:
@ -722,6 +722,10 @@ class ApplicationController < ActionController::Base
|
|||||||
session[:destination_url] = destination_url
|
session[:destination_url] = destination_url
|
||||||
redirect_to path('/session/sso')
|
redirect_to path('/session/sso')
|
||||||
return
|
return
|
||||||
|
elsif !SiteSetting.enable_local_logins && Discourse.enabled_authenticators.length == 1
|
||||||
|
# Only one authentication provider, direct straight to it
|
||||||
|
cookies[:destination_url] = destination_url
|
||||||
|
redirect_to path("/auth/#{Discourse.enabled_authenticators.first.name}")
|
||||||
else
|
else
|
||||||
# save original URL in a cookie (javascript redirects after login in this case)
|
# save original URL in a cookie (javascript redirects after login in this case)
|
||||||
cookies[:destination_url] = destination_url
|
cookies[:destination_url] = destination_url
|
||||||
|
@ -15,6 +15,35 @@ RSpec.describe ApplicationController do
|
|||||||
get "/"
|
get "/"
|
||||||
expect(response.headers["Cache-Control"]).to eq("no-cache, no-store")
|
expect(response.headers["Cache-Control"]).to eq("no-cache, no-store")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "should redirect to login normally" do
|
||||||
|
get "/"
|
||||||
|
expect(response).to redirect_to("/login")
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should redirect to SSO if enabled" do
|
||||||
|
SiteSetting.sso_url = 'http://someurl.com'
|
||||||
|
SiteSetting.enable_sso = true
|
||||||
|
get "/"
|
||||||
|
expect(response).to redirect_to("/session/sso")
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should redirect to authenticator if only one, and local logins disabled" do
|
||||||
|
# Local logins and google enabled, direct to login UI
|
||||||
|
SiteSetting.enable_google_oauth2_logins = true
|
||||||
|
get "/"
|
||||||
|
expect(response).to redirect_to("/login")
|
||||||
|
|
||||||
|
# Only google enabled, login immediately
|
||||||
|
SiteSetting.enable_local_logins = false
|
||||||
|
get "/"
|
||||||
|
expect(response).to redirect_to("/auth/google_oauth2")
|
||||||
|
|
||||||
|
# Google and GitHub enabled, direct to login UI
|
||||||
|
SiteSetting.enable_github_logins = true
|
||||||
|
get "/"
|
||||||
|
expect(response).to redirect_to("/login")
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe '#redirect_to_second_factor_if_required' do
|
describe '#redirect_to_second_factor_if_required' do
|
||||||
|
Reference in New Issue
Block a user