Skip to content

Commit 22bc743

Browse files
[FE-209] feat: 로그아웃 구현
1 parent cfd86f9 commit 22bc743

3 files changed

Lines changed: 48 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: 34 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,26 @@
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

78
export default function Setting() {
8-
const { user } = useUser()
9+
const { user, logoutUser } = useUser()
10+
const [isClickedLogout, setIsClickedLogout] = useState(false)
911
const PADDING_VALUE = 24
1012

1113
const navigate = useNavigate()
1214

15+
const handleLogout = async () => {
16+
try {
17+
logoutUser()
18+
navigate('/')
19+
} catch (e) {
20+
alert('로그아웃에 실패하였습니다.')
21+
}
22+
}
23+
1324
const getPaddingIgnoreWidth = () => {
1425
return `ml-[-${PADDING_VALUE}px] w-[calc(100%+${PADDING_VALUE * 2}px)]`
1526
}
@@ -66,12 +77,32 @@ export default function Setting() {
6677
{user && (
6778
<div>
6879
<div className={`h-[15px] ${getPaddingIgnoreWidth()} bg-grey-2`} />
69-
<section>
80+
<section
81+
id="logout-item-section"
82+
onClick={() => setIsClickedLogout(true)}
83+
>
7084
<SettingSection routeText="로그아웃" />
85+
</section>
86+
<section id="withdraw-item-section">
7187
<SettingSection routeText="회원탈퇴" routeUrl="/setting/withdraw" />
7288
</section>
7389
</div>
7490
)}
91+
{isClickedLogout && (
92+
<Alert
93+
visible={true}
94+
mainMessage={
95+
<>
96+
<span className="text-sub-1">로그아웃</span> 하시겠어요?
97+
</>
98+
}
99+
confirmMessage="둘러보기"
100+
cancelMessage="로그아웃"
101+
onConfirm={() => setIsClickedLogout(false)}
102+
onClose={() => setIsClickedLogout(false)}
103+
onCancel={handleLogout}
104+
/>
105+
)}
75106
</div>
76107
)
77108
}

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)