refresh token qoshildi
This commit is contained in:
@@ -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'] });
|
||||
|
||||
@@ -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/`,
|
||||
};
|
||||
|
||||
@@ -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);
|
||||
},
|
||||
|
||||
@@ -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);
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user