Browse Source

logout redux 초기화

master
김장현 7 months ago
parent
commit
5e9ee98c68
  1. 14
      src/@core/layouts/components/menu/vertical-menu/VerticalMenuHeader.js
  2. 2
      src/@core/layouts/components/menu/vertical-menu/index.js
  3. 5
      src/@core/layouts/components/navbar/UserDropdown.js
  4. 8
      src/containers/analysis/simulator/AnalysisSimulationContainer.js
  5. 9
      src/redux/features/account/auth/authSlice.ts
  6. 3
      src/redux/features/account/auth/authThunk.ts
  7. 6
      src/redux/rootReducer.ts
  8. 16
      src/views/control/main/ControlMain.js

14
src/@core/layouts/components/menu/vertical-menu/VerticalMenuHeader.js

@ -7,6 +7,8 @@ import { Disc, X, Circle } from 'react-feather';
// ** Config // ** Config
import themeConfig from '@configs/themeConfig'; import themeConfig from '@configs/themeConfig';
import { useDispatch } from '@src/redux/store';
import { clientDispatchTopMenu } from '@src/redux/features/layout/layoutSlice';
const VerticalMenuHeader = props => { const VerticalMenuHeader = props => {
// ** Props // ** Props
@ -18,6 +20,8 @@ const VerticalMenuHeader = props => {
menuHover menuHover
} = props; } = props;
const dispatch = useDispatch();
// ** Reset open group // ** Reset open group
useEffect(() => { useEffect(() => {
if (!menuHover && menuCollapsed) setGroupOpen([]); if (!menuHover && menuCollapsed) setGroupOpen([]);
@ -50,7 +54,15 @@ const VerticalMenuHeader = props => {
<div className='navbar-header'> <div className='navbar-header'>
<ul className='nav navbar-nav flex-row'> <ul className='nav navbar-nav flex-row'>
<li className='nav-item mr-auto'> <li className='nav-item mr-auto'>
<NavLink to='/' className='navbar-brand' style={{ marginRight: 0 }}> <NavLink
to='/'
className='navbar-brand'
style={{ marginRight: 0 }}
onClick={e => {
localStorage.setItem('topMenuCd', '/');
dispatch(clientDispatchTopMenu('/'));
}}
>
<span className='brand-logo'> <span className='brand-logo'>
<img src={themeConfig.app.appLogoImage} alt='logo' /> <img src={themeConfig.app.appLogoImage} alt='logo' />
</span> </span>

2
src/@core/layouts/components/menu/vertical-menu/index.js

@ -48,6 +48,8 @@ const Sidebar = props => {
return statistics; return statistics;
case 'cstmrService': case 'cstmrService':
return cstmrService; return cstmrService;
case '/':
return [];
} }
}; };

5
src/@core/layouts/components/navbar/UserDropdown.js

@ -18,11 +18,6 @@ import {
UncontrolledDropdown UncontrolledDropdown
} from '@component/ui'; } from '@component/ui';
import { setLogout } from '@src/redux/features/account/auth/authThunk'; import { setLogout } from '@src/redux/features/account/auth/authThunk';
import {
COOKIE_ACCESS_TOKEN,
COOKIE_REFRESH_TOKEN,
cookieStorage
} from '@src/utility/authService/cookie';
const UserDropdown = () => { const UserDropdown = () => {
// ** Store Vars // ** Store Vars

8
src/containers/analysis/simulator/AnalysisSimulationContainer.js

@ -243,8 +243,12 @@ export const AnalysisSimulationContainer = props => {
}; };
// 로그아웃 // 로그아웃
const handlerLogout = () => { const handlerLogout = async () => {
dispatch(setLogout()); const { payload } = await dispatch(setLogout());
if (payload === 'SUCCESS') {
history.replace('/account/login');
}
}; };
// 비행 시물레이션 데이터 닫기 // 비행 시물레이션 데이터 닫기

9
src/redux/features/account/auth/authSlice.ts

@ -13,6 +13,11 @@ import {
setLogin, setLogin,
setLogout setLogout
} from './authThunk'; } from './authThunk';
import {
COOKIE_ACCESS_TOKEN,
COOKIE_REFRESH_TOKEN,
cookieStorage
} from '@src/utility/authService/cookie';
const initAuth: IAuthState = { const initAuth: IAuthState = {
userPage: { userPage: {
@ -68,6 +73,10 @@ const authSlice = createSlice({
state.user = user; state.user = user;
}) })
.addCase(setLogout.fulfilled, (state, action) => { .addCase(setLogout.fulfilled, (state, action) => {
cookieStorage.removeCookie(COOKIE_ACCESS_TOKEN);
cookieStorage.removeCookie(COOKIE_REFRESH_TOKEN);
localStorage.removeItem('dronGroupId');
localStorage.removeItem('dronGroupNm');
state.isLogin = false; state.isLogin = false;
state.user = initAuth.user; state.user = initAuth.user;
}) })

3
src/redux/features/account/auth/authThunk.ts

@ -95,9 +95,6 @@ export const setLogout = createAsyncThunk(
const accessToken = cookieStorage.getCookie(COOKIE_ACCESS_TOKEN); const accessToken = cookieStorage.getCookie(COOKIE_ACCESS_TOKEN);
if (accessToken) { if (accessToken) {
cookieStorage.removeCookie(COOKIE_ACCESS_TOKEN);
cookieStorage.removeCookie(COOKIE_REFRESH_TOKEN);
const decodedToken = decode<IDecodeToken>(accessToken); const decodedToken = decode<IDecodeToken>(accessToken);
const { data }: { data: string } = await axios.get( const { data }: { data: string } = await axios.get(
`api/acnt/jwt/logout/${decodedToken.cstmrSno}` `api/acnt/jwt/logout/${decodedToken.cstmrSno}`

6
src/redux/rootReducer.ts

@ -55,6 +55,12 @@ const rootReducer = (state: any, action: any) => {
// statistics // statistics
statisticsState: statisticsReducer statisticsState: statisticsReducer
}); });
if (action.type === 'account/setLogout/fulfilled') {
combineReducer(undefined, action);
}
return combineReducer(state, action); return combineReducer(state, action);
}; };
export default rootReducer; export default rootReducer;

16
src/views/control/main/ControlMain.js

@ -22,6 +22,7 @@ import '../../../assets/css/custom.css';
import { ReactComponent as DroneMenuIcon } from '../../../assets/images/drone_menu_icon.svg'; import { ReactComponent as DroneMenuIcon } from '../../../assets/images/drone_menu_icon.svg';
import logo from '../../../assets/images/logo/kac_logo_ icon.svg'; import logo from '../../../assets/images/logo/kac_logo_ icon.svg';
import { setLogout } from '@src/redux/features/account/auth/authThunk'; import { setLogout } from '@src/redux/features/account/auth/authThunk';
import { clientDispatchTopMenu } from '@src/redux/features/layout/layoutSlice';
const ControlReportList = lazy(() => import('../report/ControlReportList')); const ControlReportList = lazy(() => import('../report/ControlReportList'));
const ControlReportDetail = lazy(() => import('../report/ControlReportDetail')); const ControlReportDetail = lazy(() => import('../report/ControlReportDetail'));
@ -128,8 +129,12 @@ const ControlMain = () => {
}; };
// 로그아웃 // 로그아웃
const handlerLogout = () => { const handlerLogout = async () => {
dispatch(setLogout()); const { payload } = await dispatch(setLogout());
if (payload === 'SUCCESS') {
history.replace('/account/login');
}
}; };
// 드론 상세정보 창 닫기 // 드론 상세정보 창 닫기
@ -181,7 +186,12 @@ const ControlMain = () => {
</li> </li>
<li> <li>
<button> <button>
<Grid onClick={() => history.push('/main/dashboard')} /> <Grid
onClick={() => {
dispatch(clientDispatchTopMenu('/'));
history.push('/main/dashboard');
}}
/>
</button> </button>
</li> </li>
</ul> </ul>

Loading…
Cancel
Save