fix(): redirect loop + signout (#8899)

This commit is contained in:
Antoine Moreaux
2024-12-05 16:24:24 +01:00
committed by GitHub
parent 11d244194f
commit f4c5d03b98
5 changed files with 26 additions and 20 deletions

View File

@ -46,6 +46,7 @@ import { useLastAuthenticatedWorkspaceDomain } from '@/domain-manager/hooks/useL
import { isMultiWorkspaceEnabledState } from '@/client-config/states/isMultiWorkspaceEnabledState'; import { isMultiWorkspaceEnabledState } from '@/client-config/states/isMultiWorkspaceEnabledState';
import { useIsCurrentLocationOnAWorkspaceSubdomain } from '@/domain-manager/hooks/useIsCurrentLocationOnAWorkspaceSubdomain'; import { useIsCurrentLocationOnAWorkspaceSubdomain } from '@/domain-manager/hooks/useIsCurrentLocationOnAWorkspaceSubdomain';
import { useReadWorkspaceSubdomainFromCurrentLocation } from '@/domain-manager/hooks/useReadWorkspaceSubdomainFromCurrentLocation'; import { useReadWorkspaceSubdomainFromCurrentLocation } from '@/domain-manager/hooks/useReadWorkspaceSubdomainFromCurrentLocation';
import { domainConfigurationState } from '@/domain-manager/states/domainConfigurationState';
export const useAuth = () => { export const useAuth = () => {
const setTokenPair = useSetRecoilState(tokenPairState); const setTokenPair = useSetRecoilState(tokenPairState);
@ -105,6 +106,9 @@ export const useAuth = () => {
const isMultiWorkspaceEnabled = snapshot const isMultiWorkspaceEnabled = snapshot
.getLoadable(isMultiWorkspaceEnabledState) .getLoadable(isMultiWorkspaceEnabledState)
.getValue(); .getValue();
const domainConfiguration = snapshot
.getLoadable(domainConfigurationState)
.getValue();
const initialSnapshot = emptySnapshot.map(({ set }) => { const initialSnapshot = emptySnapshot.map(({ set }) => {
set(iconsState, iconsValue); set(iconsState, iconsValue);
set(authProvidersState, authProvidersValue); set(authProvidersState, authProvidersValue);
@ -119,6 +123,7 @@ export const useAuth = () => {
set(clientConfigApiStatusState, clientConfigApiStatus); set(clientConfigApiStatusState, clientConfigApiStatus);
set(isCurrentUserLoadedState, isCurrentUserLoaded); set(isCurrentUserLoadedState, isCurrentUserLoaded);
set(isMultiWorkspaceEnabledState, isMultiWorkspaceEnabled); set(isMultiWorkspaceEnabledState, isMultiWorkspaceEnabled);
set(domainConfigurationState, domainConfiguration);
return undefined; return undefined;
}); });
goToRecoilSnapshot(initialSnapshot); goToRecoilSnapshot(initialSnapshot);

View File

@ -116,24 +116,20 @@ export const SignInUpGlobalScopeForm = () => {
return ( return (
<> <>
<StyledContentContainer> <StyledContentContainer>
<> <MainButton
<MainButton Icon={() => <IconGoogle size={theme.icon.size.lg} />}
Icon={() => <IconGoogle size={theme.icon.size.lg} />} title="Continue with Google"
title="Continue with Google" onClick={signInWithGoogle}
onClick={signInWithGoogle} fullWidth
fullWidth />
/> <HorizontalSeparator visible={false} />
<HorizontalSeparator visible={false} /> <MainButton
</> Icon={() => <IconMicrosoft size={theme.icon.size.lg} />}
<> title="Continue with Microsoft"
<MainButton onClick={signInWithMicrosoft}
Icon={() => <IconMicrosoft size={theme.icon.size.lg} />} fullWidth
title="Continue with Microsoft" />
onClick={signInWithMicrosoft} <HorizontalSeparator visible={false} />
fullWidth
/>
<HorizontalSeparator visible={false} />
</>
<HorizontalSeparator visible /> <HorizontalSeparator visible />
{/* eslint-disable-next-line react/jsx-props-no-spreading */} {/* eslint-disable-next-line react/jsx-props-no-spreading */}
<FormProvider {...form}> <FormProvider {...form}>

View File

@ -7,6 +7,7 @@ export const useReadWorkspaceSubdomainFromCurrentLocation = () => {
const domainConfiguration = useRecoilValue(domainConfigurationState); const domainConfiguration = useRecoilValue(domainConfigurationState);
const { isOnAWorkspaceSubdomain } = const { isOnAWorkspaceSubdomain } =
useIsCurrentLocationOnAWorkspaceSubdomain(); useIsCurrentLocationOnAWorkspaceSubdomain();
if (!isDefined(domainConfiguration.frontDomain)) { if (!isDefined(domainConfiguration.frontDomain)) {
throw new Error('frontDomain is not defined'); throw new Error('frontDomain is not defined');
} }

View File

@ -24,7 +24,11 @@ export const WorkspaceProviderEffect = () => {
const isMultiWorkspaceEnabled = useRecoilValue(isMultiWorkspaceEnabledState); const isMultiWorkspaceEnabled = useRecoilValue(isMultiWorkspaceEnabledState);
useEffect(() => { useEffect(() => {
if (isMultiWorkspaceEnabled && isDefined(workspacePublicData?.subdomain)) { if (
isMultiWorkspaceEnabled &&
isDefined(workspacePublicData?.subdomain) &&
workspacePublicData.subdomain !== workspaceSubdomain
) {
redirectToWorkspaceDomain(workspacePublicData.subdomain); redirectToWorkspaceDomain(workspacePublicData.subdomain);
} }
}, [ }, [

View File

@ -45,9 +45,9 @@ export const cookieStorageEffect =
): AtomEffect<T | null> => ): AtomEffect<T | null> =>
({ setSelf, onSet }) => { ({ setSelf, onSet }) => {
const savedValue = cookieStorage.getItem(key); const savedValue = cookieStorage.getItem(key);
if ( if (
isDefined(savedValue) && isDefined(savedValue) &&
savedValue.length !== 0 &&
(!isDefined(hooks?.validateInitFn) || (!isDefined(hooks?.validateInitFn) ||
hooks.validateInitFn(JSON.parse(savedValue))) hooks.validateInitFn(JSON.parse(savedValue)))
) { ) {