refresh token qoshildi

This commit is contained in:
Samandar Turgunboyev
2025-12-29 11:32:56 +05:00
parent ec488f09fe
commit a5e100ed90
4 changed files with 62 additions and 6 deletions

View File

@@ -1,7 +1,7 @@
'use client';
import { Link, useRouter } from '@/shared/config/i18n/navigation';
import { setToken, setUser } from '@/shared/lib/token';
import { setRefToken, setToken, setUser } from '@/shared/lib/token';
import { Button } from '@/shared/ui/button';
import {
Form,
@@ -42,6 +42,7 @@ const Login = () => {
}) => auth_api.login(body),
onSuccess: (res) => {
setToken(res.data.access);
setRefToken(res.data.refresh);
setUser(form.getValues('username'));
router.push('/');
queryClient.refetchQueries({ queryKey: ['product_list'] });

View File

@@ -21,4 +21,5 @@ export const API_URLS = {
CartItemDelete: (id: string) => `${API_V}orders/cart-item/${id}/delete/`,
CreateOrder: `${API_V}orders/order/create/`,
OrderList: `${API_V}orders/order/list/`,
Refresh_Token: `${API_V}accounts/refresh/token/`,
};

View File

@@ -1,5 +1,12 @@
import getLocaleCS from '@/shared/lib/getLocaleCS';
import { getToken, removeToken } from '@/shared/lib/token';
import {
getRefToken,
getToken,
removeRefToken,
removeToken,
setRefToken,
setToken,
} from '@/shared/lib/token';
import axios, { AxiosError } from 'axios';
import { getLocale } from 'next-intl/server';
import { LanguageRoutes } from '../i18n/types';
@@ -32,13 +39,47 @@ httpClient.interceptors.request.use(
);
httpClient.interceptors.response.use(
(response) => response,
(error) => {
async (response) => response,
async (error) => {
console.error('API error:', error);
if ((error as AxiosError)?.status === 403) {
removeToken();
try {
const refToken = getRefToken();
if (!refToken) {
removeToken();
removeRefToken();
window.location.href = '/';
}
const { data } = await axios.post(
`${BASE_URL}api/v1/accounts/refresh/token/`,
{ refresh: refToken },
);
setToken(data.access);
setRefToken(data.refresh);
} catch {
removeToken();
removeRefToken();
window.location.href = '/';
}
} else if ((error as AxiosError)?.status === 401) {
removeToken();
try {
const refToken = getRefToken();
if (!refToken) {
removeToken();
removeRefToken();
window.location.href = '/';
}
const { data } = await axios.post(
`${BASE_URL}api/v1/accounts/refresh/token/`,
{ refresh: refToken },
);
setToken(data.access);
setRefToken(data.refresh);
} catch {
removeToken();
removeRefToken();
window.location.href = '/';
}
}
return Promise.reject(error);
},

View File

@@ -2,6 +2,7 @@ import cookie from 'js-cookie';
const TOKEN = 'gastro-token';
const USER = 'gastro-user';
const REF_TOKEN = 'gastro-refresh';
export const getToken = () => {
return cookie.get(TOKEN);
@@ -26,3 +27,15 @@ export const setToken = (value: string) => {
export const setUser = (value: string) => {
cookie.set(USER, value);
};
export const setRefToken = (value: string) => {
cookie.set(REF_TOKEN, value);
};
export const removeRefToken = () => {
cookie.remove(REF_TOKEN);
};
export const getRefToken = () => {
return cookie.get(REF_TOKEN);
};