dev #756
@ -3,12 +3,12 @@
|
|||||||
import { useState } from 'react'
|
import { useState } from 'react'
|
||||||
import { useMessage } from '@/hooks/useMessage'
|
import { useMessage } from '@/hooks/useMessage'
|
||||||
import { setSession, login } from '@/lib/authActions'
|
import { setSession, login } from '@/lib/authActions'
|
||||||
import Cookies from 'js-cookie'
|
|
||||||
import { sessionStore } from '@/store/commonAtom'
|
import { sessionStore } from '@/store/commonAtom'
|
||||||
import { useRecoilState } from 'recoil'
|
import { useRecoilState } from 'recoil'
|
||||||
import { useAxios } from '@/hooks/useAxios'
|
import { useAxios } from '@/hooks/useAxios'
|
||||||
import { globalLocaleStore } from '@/store/localeAtom'
|
import { globalLocaleStore } from '@/store/localeAtom'
|
||||||
import { useRouter } from 'next/navigation'
|
import { useRouter } from 'next/navigation'
|
||||||
|
import Cookies from 'js-cookie'
|
||||||
|
|
||||||
import GlobalSpinner from '@/components/common/spinner/GlobalSpinner'
|
import GlobalSpinner from '@/components/common/spinner/GlobalSpinner'
|
||||||
|
|
||||||
|
|||||||
@ -50,6 +50,7 @@ export default function Header(props) {
|
|||||||
const [stuffSearch, setStuffSearch] = useRecoilState(stuffSearchState)
|
const [stuffSearch, setStuffSearch] = useRecoilState(stuffSearchState)
|
||||||
|
|
||||||
const { closeAll } = usePopup()
|
const { closeAll } = usePopup()
|
||||||
|
const { logoutProcess } = useLogout()
|
||||||
|
|
||||||
const { userSession } = props
|
const { userSession } = props
|
||||||
const [sessionState, setSessionState] = useRecoilState(sessionStore)
|
const [sessionState, setSessionState] = useRecoilState(sessionStore)
|
||||||
@ -78,7 +79,6 @@ export default function Header(props) {
|
|||||||
const { promiseGet } = useAxios()
|
const { promiseGet } = useAxios()
|
||||||
|
|
||||||
const { swalFire } = useSwal()
|
const { swalFire } = useSwal()
|
||||||
const { logoutProcess } = useLogout()
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 지붕재 목록 Header에서 조회
|
* 지붕재 목록 Header에서 조회
|
||||||
|
|||||||
@ -6,10 +6,9 @@ import { useRecoilState, useRecoilValue } from 'recoil'
|
|||||||
import { useAxios } from '@/hooks/useAxios'
|
import { useAxios } from '@/hooks/useAxios'
|
||||||
import { globalLocaleStore } from '@/store/localeAtom'
|
import { globalLocaleStore } from '@/store/localeAtom'
|
||||||
import { login, setSession } from '@/lib/authActions'
|
import { login, setSession } from '@/lib/authActions'
|
||||||
import { useLogout } from '@/hooks/useLogout'
|
|
||||||
import { useSwal } from '@/hooks/useSwal'
|
import { useSwal } from '@/hooks/useSwal'
|
||||||
import { QcastContext } from '@/app/QcastProvider'
|
import { QcastContext } from '@/app/QcastProvider'
|
||||||
import { useRouter } from 'next/navigation'
|
import { useLogout } from '@/hooks/useLogout'
|
||||||
|
|
||||||
export default function ChangePasswordPop(props) {
|
export default function ChangePasswordPop(props) {
|
||||||
const globalLocaleState = useRecoilValue(globalLocaleStore)
|
const globalLocaleState = useRecoilValue(globalLocaleStore)
|
||||||
@ -18,10 +17,9 @@ export default function ChangePasswordPop(props) {
|
|||||||
|
|
||||||
const { swalFire } = useSwal()
|
const { swalFire } = useSwal()
|
||||||
const { patch } = useAxios(globalLocaleState)
|
const { patch } = useAxios(globalLocaleState)
|
||||||
const { logoutProcess } = useLogout()
|
|
||||||
const { getMessage } = useMessage()
|
const { getMessage } = useMessage()
|
||||||
const [sessionState, setSessionState] = useRecoilState(sessionStore)
|
const [sessionState, setSessionState] = useRecoilState(sessionStore)
|
||||||
const router = useRouter()
|
const { logoutProcess } = useLogout()
|
||||||
const formInitValue = {
|
const formInitValue = {
|
||||||
password1: '',
|
password1: '',
|
||||||
password2: '',
|
password2: '',
|
||||||
|
|||||||
@ -6,6 +6,11 @@ import { useAxios } from '@/hooks/useAxios'
|
|||||||
import { logout } from '@/lib/authActions'
|
import { logout } from '@/lib/authActions'
|
||||||
import Cookies from 'js-cookie'
|
import Cookies from 'js-cookie'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 로그아웃 처리 Hook
|
||||||
|
* - 로그아웃 API 호출 후 성공/실패 상관없이 로그아웃 처리
|
||||||
|
* - Header, ChangePasswordPop 등에서 공통으로 사용
|
||||||
|
*/
|
||||||
export function useLogout() {
|
export function useLogout() {
|
||||||
const [sessionState] = useRecoilState(sessionStore)
|
const [sessionState] = useRecoilState(sessionStore)
|
||||||
const [stuffSearch, setStuffSearch] = useRecoilState(stuffSearchState)
|
const [stuffSearch, setStuffSearch] = useRecoilState(stuffSearchState)
|
||||||
@ -15,23 +20,24 @@ export function useLogout() {
|
|||||||
const logoutProcess = async () => {
|
const logoutProcess = async () => {
|
||||||
const param = {
|
const param = {
|
||||||
loginId: sessionState.userId,
|
loginId: sessionState.userId,
|
||||||
requestId: Cookies.get('sessionId'),
|
requestId: Cookies.get('sessionId'), // 로그인 시 저장한 sessionId
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 로그아웃 API 호출 (실패해도 로그아웃 진행)
|
||||||
|
try {
|
||||||
await promisePost({ url: '/api/login/v1.0/logout', data: param })
|
await promisePost({ url: '/api/login/v1.0/logout', data: param })
|
||||||
.then(async (res) => {
|
} catch (error) {
|
||||||
if (res.data.result.resultCode === 'S') {
|
console.log('logout api error:', error)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 물건검색 상태 초기화
|
||||||
setStuffSearch({
|
setStuffSearch({
|
||||||
...stuffSearch,
|
...stuffSearch,
|
||||||
code: 'DELETE',
|
code: 'DELETE',
|
||||||
})
|
})
|
||||||
Cookies.remove('sessionId')
|
Cookies.remove('sessionId') // sessionId 쿠키 삭제
|
||||||
await logout()
|
await logout() // iron-session 세션 파기
|
||||||
window.location.href = '/login'
|
window.location.href = '/login' // 로그인 페이지로 이동 (full reload)
|
||||||
}
|
|
||||||
})
|
|
||||||
.catch((error) => {
|
|
||||||
alert(error.response?.data?.message || 'ログアウトに失敗しました。')
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return { logoutProcess }
|
return { logoutProcess }
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user