fix: infinite redirects when hosted subdomain is changed back and forth between two values (#3615)
This commit is contained in:
@@ -2,9 +2,7 @@ import { observer } from "mobx-react";
|
|||||||
import * as React from "react";
|
import * as React from "react";
|
||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
import { Redirect } from "react-router-dom";
|
import { Redirect } from "react-router-dom";
|
||||||
import { parseDomain } from "@shared/utils/domains";
|
|
||||||
import LoadingIndicator from "~/components/LoadingIndicator";
|
import LoadingIndicator from "~/components/LoadingIndicator";
|
||||||
import env from "~/env";
|
|
||||||
import useStores from "~/hooks/useStores";
|
import useStores from "~/hooks/useStores";
|
||||||
import { changeLanguage } from "~/utils/language";
|
import { changeLanguage } from "~/utils/language";
|
||||||
|
|
||||||
@@ -25,27 +23,11 @@ const Authenticated = ({ children }: Props) => {
|
|||||||
|
|
||||||
if (auth.authenticated) {
|
if (auth.authenticated) {
|
||||||
const { user, team } = auth;
|
const { user, team } = auth;
|
||||||
const { hostname } = window.location;
|
|
||||||
|
|
||||||
if (!team || !user) {
|
if (!team || !user) {
|
||||||
return <LoadingIndicator />;
|
return <LoadingIndicator />;
|
||||||
}
|
}
|
||||||
|
|
||||||
// If we're authenticated but viewing a domain that doesn't match the
|
|
||||||
// current team then kick the user to the teams correct domain.
|
|
||||||
if (team.domain) {
|
|
||||||
if (team.domain !== hostname) {
|
|
||||||
window.location.href = `${team.url}${window.location.pathname}`;
|
|
||||||
return <LoadingIndicator />;
|
|
||||||
}
|
|
||||||
} else if (
|
|
||||||
env.SUBDOMAINS_ENABLED &&
|
|
||||||
parseDomain(hostname).teamSubdomain !== (team.subdomain ?? "")
|
|
||||||
) {
|
|
||||||
window.location.href = `${team.url}${window.location.pathname}`;
|
|
||||||
return <LoadingIndicator />;
|
|
||||||
}
|
|
||||||
|
|
||||||
return children;
|
return children;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import * as Sentry from "@sentry/react";
|
|||||||
import invariant from "invariant";
|
import invariant from "invariant";
|
||||||
import { observable, action, computed, autorun, runInAction } from "mobx";
|
import { observable, action, computed, autorun, runInAction } from "mobx";
|
||||||
import { getCookie, setCookie, removeCookie } from "tiny-cookie";
|
import { getCookie, setCookie, removeCookie } from "tiny-cookie";
|
||||||
import { getCookieDomain } from "@shared/utils/domains";
|
import { getCookieDomain, parseDomain } from "@shared/utils/domains";
|
||||||
import RootStore from "~/stores/RootStore";
|
import RootStore from "~/stores/RootStore";
|
||||||
import Policy from "~/models/Policy";
|
import Policy from "~/models/Policy";
|
||||||
import Team from "~/models/Team";
|
import Team from "~/models/Team";
|
||||||
@@ -162,6 +162,23 @@ export default class AuthStore {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Redirect to the correct custom domain or team subdomain if needed
|
||||||
|
// Occurs when the (sub)domain is changed in admin and the user hits an old url
|
||||||
|
const { hostname, pathname } = window.location;
|
||||||
|
|
||||||
|
if (this.team.domain) {
|
||||||
|
if (this.team.domain !== hostname) {
|
||||||
|
window.location.href = `${team.url}${pathname}`;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
} else if (
|
||||||
|
env.SUBDOMAINS_ENABLED &&
|
||||||
|
parseDomain(hostname).teamSubdomain !== (team.subdomain ?? "")
|
||||||
|
) {
|
||||||
|
window.location.href = `${team.url}${pathname}`;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// If we came from a redirect then send the user immediately there
|
// If we came from a redirect then send the user immediately there
|
||||||
const postLoginRedirectPath = getCookie("postLoginRedirectPath");
|
const postLoginRedirectPath = getCookie("postLoginRedirectPath");
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user