diff --git a/app/assets/javascripts/discourse/lib/logout.js.es6 b/app/assets/javascripts/discourse/lib/logout.js.es6 index 09986e892bf..23160f8e449 100644 --- a/app/assets/javascripts/discourse/lib/logout.js.es6 +++ b/app/assets/javascripts/discourse/lib/logout.js.es6 @@ -1,4 +1,6 @@ import { isEmpty } from "@ember/utils"; +import { findAll } from "discourse/models/login-method"; + export default function logout(siteSettings, keyValueStore) { if (!siteSettings || !keyValueStore) { const container = Discourse.__container__; @@ -9,9 +11,21 @@ export default function logout(siteSettings, keyValueStore) { keyValueStore.abandonLocal(); const redirect = siteSettings.logout_redirect; - if (isEmpty(redirect)) { - window.location = Discourse.getURL("/"); - } else { + if (!isEmpty(redirect)) { window.location.href = redirect; + return; } + + const sso = siteSettings.enable_sso; + const oneAuthenticator = + !siteSettings.enable_local_logins && findAll().length === 1; + + if (siteSettings.login_required && (sso || oneAuthenticator)) { + // In this situation visiting most URLs will start the auth process again + // Go to the `/login` page to avoid an immediate redirect + window.location.href = Discourse.getURL("/login"); + return; + } + + window.location.href = Discourse.getURL("/"); }