diff --git a/src/components/account/login/AccountLogin.js b/src/components/account/login/AccountLogin.js index cb1d4530..3714dbf9 100644 --- a/src/components/account/login/AccountLogin.js +++ b/src/components/account/login/AccountLogin.js @@ -65,11 +65,22 @@ export const AccountLogin = ({ history }) => { return; } - const { meta } = await dispatch(setLogin(loginForm)); + const res = await dispatch(setLogin(loginForm)); + console.log(res); + const { + meta: { requestStatus } + } = res; - if (meta.requestStatus === 'fulfilled') { - if (loginForm?.userId === 'GMPATC') { + if (requestStatus === 'fulfilled') { + const { + payload: { + user: { cptAuthCode } + } + } = res; + if (cptAuthCode === 'DF0002') { history.push('/operation/approvals'); + } else if (cptAuthCode === 'DF0002-1') { + history.push('/control/approvals'); } else { history.push('/control'); } diff --git a/src/redux/features/account/auth/authSlice.ts b/src/redux/features/account/auth/authSlice.ts index b8f5cc1e..a6a8678b 100644 --- a/src/redux/features/account/auth/authSlice.ts +++ b/src/redux/features/account/auth/authSlice.ts @@ -59,7 +59,6 @@ const authSlice = createSlice({ }; state.isLogin = true; - if (user) localStorage.setItem('cptAuthCode', user.cptAuthCode); }) .addCase(setLogin.pending, (state, action) => { state.isLogin = false; @@ -83,7 +82,7 @@ const authSlice = createSlice({ cookieStorage.removeCookie(COOKIE_REFRESH_TOKEN); localStorage.removeItem('dronGroupId'); localStorage.removeItem('dronGroupNm'); - localStorage.removeItem('cptAuthCode'); + state.isLogin = false; state.user = initAuth.user; }) diff --git a/src/redux/features/account/auth/authThunk.ts b/src/redux/features/account/auth/authThunk.ts index 8eea3682..93894213 100644 --- a/src/redux/features/account/auth/authThunk.ts +++ b/src/redux/features/account/auth/authThunk.ts @@ -297,7 +297,7 @@ export const checkToken = createAsyncThunk( const { data }: { data: boolean } = await axios.get( '/api/acnt/jwt/valid/token' ); - thunkAPI.dispatch(checkCookie()); + // thunkAPI.dispatch(checkCookie()); return data; } catch (error) { thunkAPI.dispatch( diff --git a/src/router/hoc/ResolveRoutes.tsx b/src/router/hoc/ResolveRoutes.tsx index cdfb990f..88f7886d 100644 --- a/src/router/hoc/ResolveRoutes.tsx +++ b/src/router/hoc/ResolveRoutes.tsx @@ -10,19 +10,11 @@ import LayoutWrapper from '@layouts/components/layout-wrapper'; import { IRoute } from '../routes/type'; import { Routes, GimpoControlRoutes } from '../routes'; import authenticationCheck from './authenticationCheck'; -import { useSelector } from '@src/redux/store'; -import { shallowEqual } from 'react-redux'; -import decode from 'jwt-decode'; -import { - COOKIE_ACCESS_TOKEN, - cookieStorage -} from '@src/utility/authService/cookie'; -import { IDecodeToken } from '@src/redux/features/account/auth/authState'; +import { getDecodeToken } from '@src/utility/authService/jwtTokenUtil'; export default function ResolveRoutes() { const [layout, setLayout] = useLayout(); const [transition, setTransition] = useRouterTransition(); - const user = useSelector(state => state.authState.user, shallowEqual); const DefaultLayout = layout === 'horizontal' ? 'HorizontalLayout' : 'VerticalLayout'; @@ -41,15 +33,18 @@ export default function ResolveRoutes() { const cptAuthCode = localStorage.getItem('cptAuthCode'); let Router = Routes; - if (cptAuthCode === 'DF0002' || user?.cptAuthCode === 'DF0002') - Router = GimpoControlRoutes; - let token = cookieStorage.getCookie(COOKIE_ACCESS_TOKEN); - - if (token) { - const decodeToken = decode(token as string); + let decodeToken = getDecodeToken(); + console.log(decodeToken); + if (decodeToken) { if (decodeToken.userId === 'palnet') { Router = [...Routes, ...GimpoControlRoutes]; + } else if (decodeToken.cptAuthCode.includes('DF0002')) { + Router = GimpoControlRoutes.filter( + i => + i.meta.cptAuthCode === 'All' || + i.meta.cptAuthCode === decodeToken.cptAuthCode + ); } } diff --git a/src/router/hoc/authenticationCheck.tsx b/src/router/hoc/authenticationCheck.tsx index 3753707d..4f2e19e0 100644 --- a/src/router/hoc/authenticationCheck.tsx +++ b/src/router/hoc/authenticationCheck.tsx @@ -4,13 +4,7 @@ import { useSelector, useDispatch } from '@src/redux/store'; import { checkToken } from '@src/redux/features/account/auth/authThunk'; import { ICheckAuthencationRs } from '@src/redux/features/account/auth/authState'; import { clientDispatchTopMenu } from '@src/redux/features/layout/layoutSlice'; -import { openModal } from '@src/redux/features/comn/message/messageSlice'; -import { - COOKIE_ACCESS_TOKEN, - COOKIE_REFRESH_TOKEN, - cookieStorage -} from '@src/utility/authService/cookie'; -import { ERROR_TITLE, ERROR_MESSAGE } from '@src/configs/msgConst'; +import { getDecodeToken } from '@src/utility/authService/jwtTokenUtil'; interface IOption { authRoute?: boolean; @@ -31,24 +25,24 @@ export default function (SpecificComponent: ReactNode, option: IOption) { props: IProps ) => JSX.Element; - useEffect(() => { - if (user?.cptAuthCode === 'DF0002') { - const pathname = history.location.pathname; + // useEffect(() => { + // if (user?.cptAuthCode === 'DF0002') { + // const pathname = history.location.pathname; - if ( - !( - pathname == '/operation/approvals' || - pathname == '/rightMenu' || - pathname == 'control/approvals' || - pathname == 'control/rightMenu' - ) - ) { - // id 나누면 주석 풀 것!!! - // props.history.replace('/operation/approvals'); - return; - } - } - }, [user]); + // if ( + // !( + // pathname == '/operation/approvals' || + // pathname == '/rightMenu' || + // pathname == 'control/approvals' || + // pathname == 'control/rightMenu' + // ) + // ) { + // // id 나누면 주석 풀 것!!! + // // props.history.replace('/operation/approvals'); + // return; + // } + // } + // }, [user]); useEffect(() => { // if (props.match.path === '/account/login') { @@ -67,13 +61,17 @@ export default function (SpecificComponent: ReactNode, option: IOption) { } } else { if (!authRoute) { - const cptAuthCode = localStorage.getItem('cptAuthCode'); - if (cptAuthCode === 'DF0002') { - props.history.replace('/operation/approvals'); - } else { - localStorage.setItem('topMenuCd', '/'); - dispatch(clientDispatchTopMenu('/')); - props.history.replace('/main/dashboard'); + const decodeToken = getDecodeToken(); + if (decodeToken) { + if (decodeToken.cptAuthCode === 'DF0002') { + props.history.replace('/control/approvals'); + } else if (decodeToken.cptAuthCode === 'DF0002-1') { + props.history.replace('/operation/approvals'); + } else { + localStorage.setItem('topMenuCd', '/'); + dispatch(clientDispatchTopMenu('/')); + props.history.replace('/control'); + } } } } diff --git a/src/router/index.tsx b/src/router/index.tsx index 9e444d22..b591af8f 100644 --- a/src/router/index.tsx +++ b/src/router/index.tsx @@ -25,16 +25,7 @@ export default function Router() { exact path='/' render={() => { - const cptAuthCode = localStorage.getItem('cptAuthCode'); - return ( - - ); + return ; }} /> diff --git a/src/router/routes/index.js b/src/router/routes/index.js index a2e70121..9b412249 100644 --- a/src/router/routes/index.js +++ b/src/router/routes/index.js @@ -243,7 +243,8 @@ const GimpoControlRoutes = [ component: lazy(() => import('../../views/flight/operationApprovalsView')), layout: 'BlankLayout', meta: { - authRoute: true + authRoute: true, + cptAuthCode: 'DF0002-1' } }, { @@ -251,7 +252,8 @@ const GimpoControlRoutes = [ component: lazy(() => import('../../views/flight/controlApprovalsView')), layout: 'BlankLayout', meta: { - authRoute: true + authRoute: true, + cptAuthCode: 'DF0002' } }, { @@ -259,7 +261,8 @@ const GimpoControlRoutes = [ component: lazy(() => import('../../views/controlMenuView')), layout: 'BlankLayout', meta: { - authRoute: true + authRoute: true, + cptAuthCode: 'DF0002' } }, { @@ -267,7 +270,8 @@ const GimpoControlRoutes = [ component: lazy(() => import('../../views/rightMenuView')), layout: 'BlankLayout', meta: { - authRoute: true + authRoute: true, + cptAuthCode: 'DF0002-1' } }, { @@ -275,7 +279,8 @@ const GimpoControlRoutes = [ component: lazy(() => import('../../views/account/AccountLoginView')), layout: 'BlankLayout', meta: { - authRoute: false + authRoute: false, + cptAuthCode: 'All' } } ]; diff --git a/src/utility/authService/jwtTokenUtil.ts b/src/utility/authService/jwtTokenUtil.ts index 065f62a3..6a8a364a 100644 --- a/src/utility/authService/jwtTokenUtil.ts +++ b/src/utility/authService/jwtTokenUtil.ts @@ -84,3 +84,13 @@ export const getRefreshToken = () => { return token; }; + +export const getDecodeToken = () => { + const token = cookieStorage.getCookie(COOKIE_ACCESS_TOKEN); + if (token) { + const decodeToken = decode(token); + return decodeToken; + } else { + return null; + } +};