* [#418] improved retry logic to prevent loading loop * [#418] added FullJitter algorithm Co-authored-by: Benoit TELLIER <btellier@linagora.com>
This commit is contained in:
@@ -59,10 +59,21 @@ export function HandleLogin() {
|
||||
if (userData.error) {
|
||||
dispatch(push("/error"));
|
||||
}
|
||||
if (!calendars.pending && !userData.loading && !userData.error) {
|
||||
if (
|
||||
!calendars.pending &&
|
||||
!userData.loading &&
|
||||
!userData.error &&
|
||||
!calendars.error
|
||||
) {
|
||||
dispatch(push("/calendar"));
|
||||
}
|
||||
}, [calendars.pending, userData.loading, userData.error, dispatch]);
|
||||
}, [
|
||||
calendars.pending,
|
||||
userData.loading,
|
||||
userData.error,
|
||||
calendars.error,
|
||||
dispatch,
|
||||
]);
|
||||
return <Loading />;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,8 +1,13 @@
|
||||
import { useEffect, useRef } from "react";
|
||||
import { Callback } from "./oidcAuth";
|
||||
import { useAppDispatch, useAppSelector } from "../../app/hooks";
|
||||
import { useAppDispatch } from "../../app/hooks";
|
||||
import { push } from "redux-first-history";
|
||||
import { getOpenPaasUserDataAsync, setTokens, setUserData } from "./userSlice";
|
||||
import {
|
||||
getOpenPaasUserDataAsync,
|
||||
setTokens,
|
||||
setUserData,
|
||||
setUserError,
|
||||
} from "./userSlice";
|
||||
import { Loading } from "../../components/Loading/Loading";
|
||||
import { getCalendarsListAsync } from "../Calendars/CalendarSlice";
|
||||
|
||||
@@ -21,6 +26,9 @@ export function CallbackResume() {
|
||||
const runCallback = async () => {
|
||||
try {
|
||||
const data = await Callback(saved?.code_verifier, saved?.state);
|
||||
if (!data || !data.userinfo || !data.tokenSet) {
|
||||
throw new Error("OAuth callback failed");
|
||||
}
|
||||
dispatch(setUserData(data?.userinfo));
|
||||
dispatch(setTokens(data?.tokenSet));
|
||||
await dispatch(getOpenPaasUserDataAsync());
|
||||
@@ -37,6 +45,11 @@ export function CallbackResume() {
|
||||
dispatch(push("/"));
|
||||
} catch (e) {
|
||||
console.error("OIDC callback error:", e);
|
||||
// Redirect to error page after error
|
||||
dispatch(
|
||||
setUserError(e instanceof Error ? e.message : "OAuth callback failed")
|
||||
);
|
||||
dispatch(push("/error"));
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -86,6 +86,9 @@ export const userSlice = createSlice({
|
||||
setAlarmEmails: (state, action) => {
|
||||
state.alarmEmailsEnabled = action.payload;
|
||||
},
|
||||
setUserError: (state, action) => {
|
||||
state.error = action.payload;
|
||||
},
|
||||
clearError: (state) => {
|
||||
state.error = null;
|
||||
},
|
||||
@@ -218,6 +221,7 @@ export const {
|
||||
setLanguage,
|
||||
setTimezone,
|
||||
setAlarmEmails,
|
||||
setUserError,
|
||||
clearError,
|
||||
} = userSlice.actions;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user