Skip to content

Commit f848319

Browse files
Merge pull request #250 from ItRecode/FE-209
[FE-209] feat: 로그아웃 구현
2 parents 48f11a1 + e328d2d commit f848319

3 files changed

Lines changed: 49 additions & 5 deletions

File tree

src/apis/auth.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,3 +19,7 @@ export const getIsDuplicatedNickname = (nickname: string) => {
1919
params: { nickname },
2020
})
2121
}
22+
23+
export const logout = () => {
24+
return baseInstance.post(`/member/logout`)
25+
}

src/pages/Setting/Setting.tsx

Lines changed: 35 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,28 @@
11
import { useUser } from '@react-query/hooks/useUser'
2-
import React from 'react'
2+
import React, { useState } from 'react'
33
import SettingSection from './SettingSection'
44
import { ReactComponent as Front } from '@assets/front_white.svg'
55
import { useNavigate } from 'react-router-dom'
6+
import Alert from '@components/Alert'
67
import Loading from '@components/Loading'
78

89
export default function Setting() {
9-
const { user, isLoading } = useUser()
10+
const { user, isLoading, logoutUser } = useUser()
11+
const [isClickedLogout, setIsClickedLogout] = useState(false)
12+
1013
const PADDING_VALUE = 24
1114

1215
const navigate = useNavigate()
1316

17+
const handleLogout = async () => {
18+
try {
19+
logoutUser()
20+
navigate('/')
21+
} catch (e) {
22+
alert('로그아웃에 실패하였습니다.')
23+
}
24+
}
25+
1426
const getPaddingIgnoreWidth = () => {
1527
return `ml-[-${PADDING_VALUE}px] w-[calc(100%+${PADDING_VALUE * 2}px)]`
1628
}
@@ -73,12 +85,32 @@ export default function Setting() {
7385
{user && (
7486
<div>
7587
<div className={`h-[15px] ${getPaddingIgnoreWidth()} bg-grey-2`} />
76-
<section>
88+
<section
89+
id="logout-item-section"
90+
onClick={() => setIsClickedLogout(true)}
91+
>
7792
<SettingSection routeText="로그아웃" />
93+
</section>
94+
<section id="withdraw-item-section">
7895
<SettingSection routeText="회원탈퇴" routeUrl="/setting/withdraw" />
7996
</section>
8097
</div>
8198
)}
99+
{isClickedLogout && (
100+
<Alert
101+
visible={true}
102+
mainMessage={
103+
<>
104+
<span className="text-sub-1">로그아웃</span> 하시겠어요?
105+
</>
106+
}
107+
confirmMessage="둘러보기"
108+
cancelMessage="로그아웃"
109+
onConfirm={() => setIsClickedLogout(false)}
110+
onClose={() => setIsClickedLogout(false)}
111+
onCancel={handleLogout}
112+
/>
113+
)}
82114
</div>
83115
)
84116
}

src/react-query/hooks/useUser.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
import { QUERY_KEYS } from '@react-query/queryKeys'
2-
import { useQuery } from '@tanstack/react-query'
2+
import { useQuery, useQueryClient } from '@tanstack/react-query'
33
import { getUserInfo } from '@apis/user'
4+
import { logout } from '@apis/auth'
45

56
export const useUser = () => {
7+
const queryClient = useQueryClient()
8+
69
const {
710
data: user = null,
811
refetch,
@@ -11,5 +14,10 @@ export const useUser = () => {
1114
retry: false,
1215
})
1316

14-
return { user, refetch, isLoading }
17+
const logoutUser = async () => {
18+
await logout()
19+
queryClient.setQueriesData([QUERY_KEYS.user], null)
20+
}
21+
22+
return { user, refetch, isLoading, logoutUser }
1523
}

0 commit comments

Comments
 (0)