From 3b547e32704e916395b946ba0125e405e6df78c1 Mon Sep 17 00:00:00 2001 From: syam babu Date: Mon, 28 Aug 2023 16:04:28 +0530 Subject: [PATCH 1/6] fix: fixed issue with getting kicked out of cms --- src/pages/Dashboard/Dashboard.jsx | 23 ++++++++++++++++++++--- src/redux/reducer/userSlice.js | 3 ++- src/services/users.js | 7 +++++-- 3 files changed, 27 insertions(+), 6 deletions(-) diff --git a/src/pages/Dashboard/Dashboard.jsx b/src/pages/Dashboard/Dashboard.jsx index 58fe3c90e..5a45a4514 100644 --- a/src/pages/Dashboard/Dashboard.jsx +++ b/src/pages/Dashboard/Dashboard.jsx @@ -7,12 +7,13 @@ import Sidebar from '../../components/Sidebar/Main'; import { useNavigate, useParams } from 'react-router-dom'; import { PathName } from '../../constants/pathName'; import { useSelector, useDispatch } from 'react-redux'; -import { getUserDetails } from '../../redux/reducer/userSlice'; +import { getUserDetails, setUser } from '../../redux/reducer/userSlice'; import { useLazyGetCalendarQuery, useGetAllCalendarsQuery } from '../../services/calendar'; import { setSelectedCalendar } from '../../redux/reducer/selectedCalendarSlice'; import { setInterfaceLanguage } from '../../redux/reducer/interfaceLanguageSlice'; import i18n from 'i18next'; import Cookies from 'js-cookie'; +import { useLazyGetCurrentUserQuery } from '../../services/users'; const { Header, Content } = Layout; @@ -29,6 +30,8 @@ function Dashboard() { { skip: accessToken ? false : true }, ); + const [getCurrentUserDetails] = useLazyGetCurrentUserQuery(); + let { calendarId } = useParams(); let [searchParams] = useSearchParams(); @@ -37,8 +40,22 @@ function Dashboard() { ); useEffect(() => { - if (!accessToken && accessToken === '') navigate(PathName.Login); - else { + if (!accessToken && accessToken === '') { + const accessToken = Cookies.get('accessToken'); + const refreshToken = Cookies.get('refreshToken'); + + if (accessToken) { + getCurrentUserDetails({ accessToken, calendarId }) + .unwrap() + .then((response) => { + dispatch( + setUser({ user: { ...response }, refreshToken: { token: refreshToken }, accessToken: accessToken }), + ); + }); + } else { + navigate(PathName.Login); + } + } else { if (location?.state?.previousPath?.toLowerCase() === 'login' || !calendarId) dispatch(setInterfaceLanguage(user?.interfaceLanguage?.toLowerCase())); i18n.changeLanguage(user?.interfaceLanguage?.toLowerCase()); diff --git a/src/redux/reducer/userSlice.js b/src/redux/reducer/userSlice.js index 466d84e0d..f678aefb0 100644 --- a/src/redux/reducer/userSlice.js +++ b/src/redux/reducer/userSlice.js @@ -35,12 +35,13 @@ export const userSlice = createSlice({ }, clearUser: () => { Cookies.remove('accessToken'); + Cookies.remove('refreshToken'); return initialState; }, }, }); -export const { setToken, setUser, clearUser } = userSlice.actions; +export const { setToken, setUser, clearUser, test } = userSlice.actions; export const getUserDetails = (state) => state.user; diff --git a/src/services/users.js b/src/services/users.js index 7c6ca9a0f..f88925e99 100644 --- a/src/services/users.js +++ b/src/services/users.js @@ -1,5 +1,6 @@ import { createApi } from '@reduxjs/toolkit/query/react'; import { baseQueryWithReauth } from '../utils/services'; + export const usersApi = createApi({ reducerPath: 'usersApi', baseQuery: baseQueryWithReauth, @@ -20,12 +21,13 @@ export const usersApi = createApi({ query: () => `users/roles`, }), getCurrentUser: builder.query({ - query: ({ calendarId }) => { + query: (credentials) => { return { url: `users/current`, method: 'GET', headers: { - 'calendar-id': calendarId, + authorization: `Bearer ${credentials.accessToken}`, + 'calendar-id': credentials.calendarId, }, }; }, @@ -75,4 +77,5 @@ export const { useGetAllUsersQuery, useGetCurrentUserQuery, useUpdateCurrentUserMutation, + useLazyGetCurrentUserQuery, } = usersApi; From 200da8dd8d54a05ada0348e753e1bff1d49eb145 Mon Sep 17 00:00:00 2001 From: syam babu Date: Mon, 28 Aug 2023 16:07:58 +0530 Subject: [PATCH 2/6] fix: unwanted export removed --- src/redux/reducer/userSlice.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/redux/reducer/userSlice.js b/src/redux/reducer/userSlice.js index f678aefb0..fb4bb405a 100644 --- a/src/redux/reducer/userSlice.js +++ b/src/redux/reducer/userSlice.js @@ -41,7 +41,7 @@ export const userSlice = createSlice({ }, }); -export const { setToken, setUser, clearUser, test } = userSlice.actions; +export const { setToken, setUser, clearUser } = userSlice.actions; export const getUserDetails = (state) => state.user; From 74707fb7681435cd995d6ee1b5498547e176bf11 Mon Sep 17 00:00:00 2001 From: syam babu Date: Mon, 28 Aug 2023 16:19:33 +0530 Subject: [PATCH 3/6] fix: destructured props --- src/pages/Dashboard/Dashboard.jsx | 4 ++-- src/services/users.js | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/pages/Dashboard/Dashboard.jsx b/src/pages/Dashboard/Dashboard.jsx index 5a45a4514..11b3c0e7a 100644 --- a/src/pages/Dashboard/Dashboard.jsx +++ b/src/pages/Dashboard/Dashboard.jsx @@ -44,8 +44,8 @@ function Dashboard() { const accessToken = Cookies.get('accessToken'); const refreshToken = Cookies.get('refreshToken'); - if (accessToken) { - getCurrentUserDetails({ accessToken, calendarId }) + if (accessToken && calendarId) { + getCurrentUserDetails({ accessToken: accessToken, calendarId: calendarId }) .unwrap() .then((response) => { dispatch( diff --git a/src/services/users.js b/src/services/users.js index f88925e99..f939a2083 100644 --- a/src/services/users.js +++ b/src/services/users.js @@ -21,13 +21,13 @@ export const usersApi = createApi({ query: () => `users/roles`, }), getCurrentUser: builder.query({ - query: (credentials) => { + query: ({ accessToken, calendarId }) => { return { url: `users/current`, method: 'GET', headers: { - authorization: `Bearer ${credentials.accessToken}`, - 'calendar-id': credentials.calendarId, + authorization: `Bearer ${accessToken}`, + 'calendar-id': calendarId, }, }; }, From dcfb7e852a2524ea09cb3519adc6a017fe788153 Mon Sep 17 00:00:00 2001 From: syam babu Date: Mon, 28 Aug 2023 16:48:14 +0530 Subject: [PATCH 4/6] fix: added token fetching from cookies if store is empty --- src/utils/services.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/utils/services.js b/src/utils/services.js index 1969b967b..4f81c2aaf 100644 --- a/src/utils/services.js +++ b/src/utils/services.js @@ -12,6 +12,9 @@ const baseQuery = fetchBaseQuery({ const token = getState().user.accessToken; if (token) { headers.set('authorization', `Bearer ${token}`); + } else { + const tokenFromCookies = Cookies.get('accessToken'); + headers.set('authorization', `Bearer ${tokenFromCookies}`); } return headers; }, From 829e2f13f84bac4283292afaa18be87fb0f24059 Mon Sep 17 00:00:00 2001 From: syam babu Date: Mon, 28 Aug 2023 16:51:20 +0530 Subject: [PATCH 5/6] fix: added check for refresh token if store is empty --- src/utils/services.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/utils/services.js b/src/utils/services.js index 4f81c2aaf..68a32125f 100644 --- a/src/utils/services.js +++ b/src/utils/services.js @@ -9,12 +9,12 @@ const mutex = new Mutex(); const baseQuery = fetchBaseQuery({ baseUrl: process.env.REACT_APP_API_URL, prepareHeaders: (headers, { getState }) => { - const token = getState().user.accessToken; + let token = getState().user.accessToken; if (token) { headers.set('authorization', `Bearer ${token}`); } else { - const tokenFromCookies = Cookies.get('accessToken'); - headers.set('authorization', `Bearer ${tokenFromCookies}`); + token = Cookies.get('accessToken'); + headers.set('authorization', `Bearer ${token}`); } return headers; }, @@ -49,6 +49,9 @@ export const baseQueryWithReauth = async (args, api, extraOptions) => { const release = await mutex.acquire(); let refreshResult; let token = api.getState().user?.refreshToken?.token; + if (!token) { + token = Cookies.get('accessToken'); + } try { const fetchResponse = await fetch(`${process.env.REACT_APP_API_URL}/refresh-token`, { method: 'POST', From 857f4f0a07fb0eb76aa32f153675bbb3e3d365f5 Mon Sep 17 00:00:00 2001 From: syam babu Date: Mon, 28 Aug 2023 16:52:26 +0530 Subject: [PATCH 6/6] fix: minor --- src/utils/services.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/utils/services.js b/src/utils/services.js index 68a32125f..5fe62f045 100644 --- a/src/utils/services.js +++ b/src/utils/services.js @@ -50,7 +50,7 @@ export const baseQueryWithReauth = async (args, api, extraOptions) => { let refreshResult; let token = api.getState().user?.refreshToken?.token; if (!token) { - token = Cookies.get('accessToken'); + token = Cookies.get('refreshToken'); } try { const fetchResponse = await fetch(`${process.env.REACT_APP_API_URL}/refresh-token`, {