fix(dashboard): redirect students on app domain to org LMS (#675)
* fix(dashboard): redirect students on app domain to org LMS When a student logs in on app.classroomio.com, send them to their org tenant domain with a full page reload instead of staying on /lms at the app host. Org sites and self-hosted installs keep the existing behavior. Students who explicitly open /onboarding while already belonging to an org are no longer redirected away, so they can still create their own academy with the same email. Co-authored-by: Rotimi Best <[email protected]> * refactor(dashboard): use getOrgPublicUrl instead of duplicate helper Main added getOrgPublicOrigin for tenant URLs; extend it with getOrgPublicUrl for path-based redirects and drop the parallel getOrgSiteUrl helper from org utils. Co-authored-by: Rotimi Best <[email protected]> ---------
This commit is contained in:
co-authored by
Rotimi Best
parent
5320f1eb44
commit
3547901de6
@@ -1,5 +1,5 @@
|
|||||||
import { BaseApi, classroomio } from '$lib/utils/services/api';
|
import { BaseApi, classroomio } from '$lib/utils/services/api';
|
||||||
import { currentOrg, mergeAccountOrgFromServer, orgs } from '$lib/utils/store/org';
|
import { currentOrg, getOrgPublicUrl, mergeAccountOrgFromServer, orgs } from '$lib/utils/store/org';
|
||||||
import { defaultProfileState, defaultUserState, profile, user } from '$lib/utils/store/user';
|
import { defaultProfileState, defaultUserState, profile, user } from '$lib/utils/store/user';
|
||||||
|
|
||||||
import type { AccountResponse } from './types';
|
import type { AccountResponse } from './types';
|
||||||
@@ -201,12 +201,26 @@ class AppInitApi extends BaseApi {
|
|||||||
|
|
||||||
if (!shouldRedirectOnAuth(page.url.pathname)) return;
|
if (!shouldRedirectOnAuth(page.url.pathname)) return;
|
||||||
|
|
||||||
|
// Students with existing org memberships who open /onboarding may intend to create their own academy.
|
||||||
|
if (path.includes('/onboarding') && isStudent && userHasOrganizations) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
const shouldGoToLMS = isCloud ? isOrgSite || !!isStudent : !!isStudent;
|
const shouldGoToLMS = isCloud ? isOrgSite || !!isStudent : !!isStudent;
|
||||||
console.log('redirecting to', shouldGoToLMS ? 'lms' : 'org');
|
console.log('redirecting to', shouldGoToLMS ? 'lms' : 'org');
|
||||||
return shouldGoToLMS ? this.goToLMS() : this.goToOrg();
|
return shouldGoToLMS ? this.goToLMS(isOrgSite) : this.goToOrg();
|
||||||
}
|
}
|
||||||
|
|
||||||
goToLMS() {
|
goToLMS(isOrgSite: boolean) {
|
||||||
|
const isCloud = PUBLIC_IS_SELFHOSTED !== 'true';
|
||||||
|
const isStudent = get(isOrgStudent);
|
||||||
|
const selectedOrg = get(currentOrg);
|
||||||
|
|
||||||
|
if (isCloud && !isOrgSite && isStudent && selectedOrg.siteName) {
|
||||||
|
window.location.href = getOrgPublicUrl(selectedOrg, '/lms');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
goto(resolve('/lms', {}));
|
goto(resolve('/lms', {}));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -104,6 +104,26 @@ export function getOrgPublicOrigin(org: OrgPublicOrigin): string {
|
|||||||
return browser ? window.location.origin : '';
|
return browser ? window.location.origin : '';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Absolute URL on an org's public tenant site (e.g. `/lms`, `/course/{slug}`). Client-only. */
|
||||||
|
export function getOrgPublicUrl(org: OrgPublicOrigin, pathname = '/'): string {
|
||||||
|
if (!browser) {
|
||||||
|
return pathname;
|
||||||
|
}
|
||||||
|
|
||||||
|
const origin = getOrgPublicOrigin(org);
|
||||||
|
if (!origin) {
|
||||||
|
return pathname;
|
||||||
|
}
|
||||||
|
|
||||||
|
const url = new URL(pathname, origin);
|
||||||
|
|
||||||
|
if (window.location.host.includes('localhost') && org.siteName) {
|
||||||
|
url.searchParams.set('org', org.siteName);
|
||||||
|
}
|
||||||
|
|
||||||
|
return url.toString();
|
||||||
|
}
|
||||||
|
|
||||||
export const currentOrgDomain = derived(currentOrg, ($currentOrg) => getOrgPublicOrigin($currentOrg));
|
export const currentOrgDomain = derived(currentOrg, ($currentOrg) => getOrgPublicOrigin($currentOrg));
|
||||||
|
|
||||||
export const isFreePlan = derived(currentOrg, ($currentOrg) => {
|
export const isFreePlan = derived(currentOrg, ($currentOrg) => {
|
||||||
|
|||||||
Reference in New Issue
Block a user