Skip to content

Commit 1e1d330

Browse files
committed
refactor(cookies): unify cookie handling
1 parent 6b243c1 commit 1e1d330

18 files changed

Lines changed: 146 additions & 75 deletions

File tree

src/api/hooks/useLogout.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { logout } from '../requests'
44

55
export const useLogout = (
66
options?: Omit<
7-
UseMutationOptions<void, unknown, void>,
7+
UseMutationOptions<unknown, unknown, void>,
88
'mutationKey' | 'mutationFn'
99
>
1010
) =>

src/api/instance.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import axios from 'axios'
22

33
import { APP_CONFIG } from '../constants/app'
4-
import { getSessionToken } from '../lib/cookies/session'
4+
import { cookies } from '../lib/cookie'
55

66
export const api = axios.create({
77
baseURL: APP_CONFIG.apiUrl
@@ -10,6 +10,6 @@ export const api = axios.create({
1010
export const instance = axios.create({
1111
baseURL: APP_CONFIG.apiUrl,
1212
headers: {
13-
'X-Session-Token': getSessionToken() ?? ''
13+
'X-Session-Token': cookies.get('token') ?? ''
1414
}
1515
})

src/api/requests/account.ts

Lines changed: 5 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -9,27 +9,13 @@ import type {
99
} from '../generated'
1010
import { api, instance } from '../instance'
1111

12-
import { setSessionToken } from '@/src/lib/cookies/session'
13-
1412
export const getMe = async () =>
15-
await instance
16-
.get<AccountResponse>('/auth/account')
17-
.then(response => response.data)
18-
19-
export const createAccount = async (data: CreateUserRequest) => {
20-
const response = await api.post<CreateUserResponse>(
21-
'/auth/account/create',
22-
data
23-
)
24-
25-
if (response.data.token) {
26-
setSessionToken(response.data.token)
27-
28-
instance.defaults.headers['X-Session-Token'] = response.data.token
29-
}
13+
await instance.get<AccountResponse>('/auth/account').then(res => res.data)
3014

31-
return response.data
32-
}
15+
export const createAccount = async (data: CreateUserRequest) =>
16+
await api
17+
.post<CreateUserResponse>('/auth/account/create', data)
18+
.then(res => res.data)
3319

3420
export const sendEmailVerification = () => instance.post('/auth/account/verify')
3521

src/api/requests/session.ts

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,6 @@ import type {
66
} from '../generated'
77
import { api, instance } from '../instance'
88

9-
import { removeSessionToken } from '@/src/lib/cookies/session'
10-
119
export const login = async (data: LoginRequest) =>
1210
await api
1311
.post<
@@ -16,9 +14,7 @@ export const login = async (data: LoginRequest) =>
1614
.then(response => response.data)
1715

1816
export const logout = async () =>
19-
await instance
20-
.post<boolean>('/auth/session/logout')
21-
.then(() => removeSessionToken())
17+
await instance.post<boolean>('/auth/session/logout')
2218

2319
export const getSessions = async () =>
2420
await instance

src/app/account/layout.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import type { ReactNode } from 'react'
22

33
import { Header } from '@/src/components/layout/header'
44
import { UserNavigation } from '@/src/components/layout/user-navigation'
5-
import { AccountProvider } from '@/src/components/providers/account-provider'
5+
import { AccountProvider } from '@/src/providers'
66

77
export default function AccountLayout({ children }: { children: ReactNode }) {
88
return (

src/app/auth/callback/page.tsx

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ import { useEffect } from 'react'
55

66
import { instance } from '@/src/api/instance'
77
import { EllipsisLoader } from '@/src/components/shared/ellipsis-loader'
8-
import { setSessionToken } from '@/src/lib/cookies/session'
8+
import { ROUTES } from '@/src/constants'
9+
import { cookies } from '@/src/lib/cookie'
910

1011
export default function AuthCallbackPage() {
1112
const router = useRouter()
@@ -15,9 +16,11 @@ export default function AuthCallbackPage() {
1516
const token = new URLSearchParams(hash.slice(1)).get('token')
1617

1718
if (token) {
18-
setSessionToken(token)
19+
cookies.set('token', token, { expires: 30 })
20+
1921
instance.defaults.headers['X-Session-Token'] = token
20-
router.push('/account/settings')
22+
23+
router.push(ROUTES.ACCOUNT.ROOT)
2124
}
2225
}, [router])
2326

src/app/auth/telegram-oauth-finish/page.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
'use client'
22

33
import { useRouter } from 'next/navigation'
4-
import { useEffect, useState } from 'react'
4+
import { useEffect } from 'react'
55

66
import { TelegramAuthRequest } from '@/src/api/generated'
77
import { useTelegramAuth } from '@/src/api/hooks'
88
import { instance } from '@/src/api/instance'
99
import { EllipsisLoader } from '@/src/components/shared/ellipsis-loader'
1010
import { ROUTES } from '@/src/constants'
1111
import { useFingerprint } from '@/src/hooks'
12-
import { setSessionToken } from '@/src/lib/cookies/session'
12+
import { cookies } from '@/src/lib/cookie'
1313

1414
function base64DecodeUnicode(str: string) {
1515
try {
@@ -32,7 +32,7 @@ export default function TelegramAuthFinishPage() {
3232

3333
const { mutate } = useTelegramAuth({
3434
onSuccess(data) {
35-
setSessionToken(data.token)
35+
cookies.set('token', data.token, { expires: 30 })
3636

3737
instance.defaults.headers['X-Session-Token'] = data.token
3838

src/components/account/settings/account-actions.tsx

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import { useMutation } from '@tanstack/react-query'
21
import { useRouter } from 'next/navigation'
32
import { useState } from 'react'
43
import { toast } from 'sonner'
@@ -7,19 +6,24 @@ import { ConfirmDialog } from '../../shared/confirm-dialog'
76
import { Button } from '../../ui/button'
87
import { Card, CardContent } from '../../ui/card'
98

10-
import { logout } from '@/src/api/requests'
9+
import { useLogout } from '@/src/api/hooks'
10+
import { instance } from '@/src/api/instance'
11+
import { ROUTES } from '@/src/constants'
12+
import { cookies } from '@/src/lib/cookie'
1113

1214
export function AccountActions() {
1315
const [isOpen, setIsOpen] = useState(false)
1416

1517
const { push } = useRouter()
1618

17-
const { mutate } = useMutation({
18-
mutationKey: ['logout'],
19-
mutationFn: () => logout(),
19+
const { mutate } = useLogout({
2020
onSuccess() {
21+
cookies.remove('token')
22+
23+
delete instance.defaults.headers['X-Session-Token']
24+
2125
setIsOpen(false)
22-
push('/auth/login')
26+
push(ROUTES.AUTH.LOGIN())
2327
},
2428
onError(error: any) {
2529
toast.error(error.response?.data?.message ?? 'Ошибка при выходе')

src/components/auth/login-form.tsx

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
'use client'
22

33
import { zodResolver } from '@hookform/resolvers/zod'
4-
import { useMutation } from '@tanstack/react-query'
54
import Link from 'next/link'
65
import { useRouter, useSearchParams } from 'next/navigation'
76
import { useEffect, useState } from 'react'
@@ -10,7 +9,6 @@ import { toast } from 'sonner'
109
import { z } from 'zod'
1110

1211
import { Captcha } from '../shared/captcha'
13-
import { EllipsisLoader } from '../shared/ellipsis-loader'
1412
import { Button } from '../ui/button'
1513
import {
1614
Form,
@@ -29,7 +27,7 @@ import { instance } from '@/src/api/instance'
2927
import { ROUTES } from '@/src/constants'
3028
import { useFingerprint } from '@/src/hooks'
3129
import { analytics } from '@/src/lib/analytics/events'
32-
import { setSessionToken } from '@/src/lib/cookies/session'
30+
import { cookies } from '@/src/lib/cookie'
3331

3432
const loginSchema = z.object({
3533
email: z
@@ -65,7 +63,7 @@ export function LoginForm() {
6563
}
6664

6765
if ('token' in data && typeof data.token === 'string') {
68-
setSessionToken(data.token)
66+
cookies.set('token', data.token, { expires: 30 })
6967

7068
instance.defaults.headers['X-Session-Token'] = data.token
7169

src/components/auth/mfa-form.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import { useVerifyMfa } from '@/src/api/hooks/useVerifyMfa'
1313
import { instance } from '@/src/api/instance'
1414
import { generateAuthenticationOptions } from '@/src/api/requests'
1515
import { MFA_OPTIONS, MfaMethod, ROUTES } from '@/src/constants'
16-
import { setSessionToken } from '@/src/lib/cookies/session'
16+
import { cookies } from '@/src/lib/cookie'
1717
import { cn } from '@/src/lib/utils'
1818

1919
interface MfaFormProps {
@@ -33,7 +33,7 @@ export function MfaForm({ ticket, methods, userId, onBack }: MfaFormProps) {
3333

3434
const { mutate, isPending } = useVerifyMfa({
3535
onSuccess(data) {
36-
setSessionToken(data.token)
36+
cookies.set('token', data.token, { expires: 30 })
3737

3838
instance.defaults.headers['X-Session-Token'] = data.token
3939

0 commit comments

Comments
 (0)