Fix #12815 Direct links to AWX do not reroute the user after authentication (#14399)

Signed-off-by: Sasa993 <jovicic.sasa@hotmail.com>
Co-authored-by: Sasa Jovicic <sjovicic@anexia-it.com>
This commit is contained in:
Sasa Jovicic
2023-10-03 22:55:22 +02:00
committed by GitHub
parent 05b58c4df6
commit 9d60b0b9c6
2 changed files with 22 additions and 2 deletions

View File

@@ -75,6 +75,7 @@ function SessionProvider({ children }) {
const [sessionCountdown, setSessionCountdown] = useState(0); const [sessionCountdown, setSessionCountdown] = useState(0);
const [authRedirectTo, setAuthRedirectTo] = useState('/'); const [authRedirectTo, setAuthRedirectTo] = useState('/');
const [isUserBeingLoggedOut, setIsUserBeingLoggedOut] = useState(false); const [isUserBeingLoggedOut, setIsUserBeingLoggedOut] = useState(false);
const [isRedirectLinkReceived, setIsRedirectLinkReceived] = useState(false);
const { const {
request: fetchLoginRedirectOverride, request: fetchLoginRedirectOverride,
@@ -99,6 +100,7 @@ function SessionProvider({ children }) {
const logout = useCallback(async () => { const logout = useCallback(async () => {
setIsUserBeingLoggedOut(true); setIsUserBeingLoggedOut(true);
setIsRedirectLinkReceived(false);
if (!isSessionExpired.current) { if (!isSessionExpired.current) {
setAuthRedirectTo('/logout'); setAuthRedirectTo('/logout');
window.localStorage.setItem(SESSION_USER_ID, null); window.localStorage.setItem(SESSION_USER_ID, null);
@@ -112,6 +114,18 @@ function SessionProvider({ children }) {
return <Redirect to="/login" />; return <Redirect to="/login" />;
}, [setSessionTimeout, setSessionCountdown]); }, [setSessionTimeout, setSessionCountdown]);
useEffect(() => {
const unlisten = history.listen((location, action) => {
if (action === 'POP') {
setIsRedirectLinkReceived(true);
}
});
return () => {
unlisten(); // ensure that the listener is removed when the component unmounts
};
}, [history]);
useEffect(() => { useEffect(() => {
if (!isAuthenticated(document.cookie)) { if (!isAuthenticated(document.cookie)) {
return () => {}; return () => {};
@@ -176,6 +190,8 @@ function SessionProvider({ children }) {
logout, logout,
sessionCountdown, sessionCountdown,
setAuthRedirectTo, setAuthRedirectTo,
isRedirectLinkReceived,
setIsRedirectLinkReceived,
}), }),
[ [
authRedirectTo, authRedirectTo,
@@ -186,6 +202,8 @@ function SessionProvider({ children }) {
logout, logout,
sessionCountdown, sessionCountdown,
setAuthRedirectTo, setAuthRedirectTo,
isRedirectLinkReceived,
setIsRedirectLinkReceived,
] ]
); );

View File

@@ -45,7 +45,8 @@ const Login = styled(PFLogin)`
function AWXLogin({ alt, isAuthenticated }) { function AWXLogin({ alt, isAuthenticated }) {
const [userId, setUserId] = useState(null); const [userId, setUserId] = useState(null);
const { authRedirectTo, isSessionExpired } = useSession(); const { authRedirectTo, isSessionExpired, isRedirectLinkReceived } =
useSession();
const isNewUser = useRef(true); const isNewUser = useRef(true);
const hasVerifiedUser = useRef(false); const hasVerifiedUser = useRef(false);
@@ -179,7 +180,8 @@ function AWXLogin({ alt, isAuthenticated }) {
return <LoadingSpinner />; return <LoadingSpinner />;
} }
if (userId && hasVerifiedUser.current) { if (userId && hasVerifiedUser.current) {
const redirect = isNewUser.current ? '/home' : authRedirectTo; const redirect =
isNewUser.current && !isRedirectLinkReceived ? '/home' : authRedirectTo;
return <Redirect to={redirect} />; return <Redirect to={redirect} />;
} }