refresh token qoshildi
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
import { Link, useRouter } from '@/shared/config/i18n/navigation';
|
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 { Button } from '@/shared/ui/button';
|
||||||
import {
|
import {
|
||||||
Form,
|
Form,
|
||||||
@@ -42,6 +42,7 @@ const Login = () => {
|
|||||||
}) => auth_api.login(body),
|
}) => auth_api.login(body),
|
||||||
onSuccess: (res) => {
|
onSuccess: (res) => {
|
||||||
setToken(res.data.access);
|
setToken(res.data.access);
|
||||||
|
setRefToken(res.data.refresh);
|
||||||
setUser(form.getValues('username'));
|
setUser(form.getValues('username'));
|
||||||
router.push('/');
|
router.push('/');
|
||||||
queryClient.refetchQueries({ queryKey: ['product_list'] });
|
queryClient.refetchQueries({ queryKey: ['product_list'] });
|
||||||
|
|||||||
@@ -21,4 +21,5 @@ export const API_URLS = {
|
|||||||
CartItemDelete: (id: string) => `${API_V}orders/cart-item/${id}/delete/`,
|
CartItemDelete: (id: string) => `${API_V}orders/cart-item/${id}/delete/`,
|
||||||
CreateOrder: `${API_V}orders/order/create/`,
|
CreateOrder: `${API_V}orders/order/create/`,
|
||||||
OrderList: `${API_V}orders/order/list/`,
|
OrderList: `${API_V}orders/order/list/`,
|
||||||
|
Refresh_Token: `${API_V}accounts/refresh/token/`,
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,5 +1,12 @@
|
|||||||
import getLocaleCS from '@/shared/lib/getLocaleCS';
|
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 axios, { AxiosError } from 'axios';
|
||||||
import { getLocale } from 'next-intl/server';
|
import { getLocale } from 'next-intl/server';
|
||||||
import { LanguageRoutes } from '../i18n/types';
|
import { LanguageRoutes } from '../i18n/types';
|
||||||
@@ -32,13 +39,47 @@ httpClient.interceptors.request.use(
|
|||||||
);
|
);
|
||||||
|
|
||||||
httpClient.interceptors.response.use(
|
httpClient.interceptors.response.use(
|
||||||
(response) => response,
|
async (response) => response,
|
||||||
(error) => {
|
async (error) => {
|
||||||
console.error('API error:', error);
|
console.error('API error:', error);
|
||||||
if ((error as AxiosError)?.status === 403) {
|
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) {
|
} 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);
|
return Promise.reject(error);
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ import cookie from 'js-cookie';
|
|||||||
|
|
||||||
const TOKEN = 'gastro-token';
|
const TOKEN = 'gastro-token';
|
||||||
const USER = 'gastro-user';
|
const USER = 'gastro-user';
|
||||||
|
const REF_TOKEN = 'gastro-refresh';
|
||||||
|
|
||||||
export const getToken = () => {
|
export const getToken = () => {
|
||||||
return cookie.get(TOKEN);
|
return cookie.get(TOKEN);
|
||||||
@@ -26,3 +27,15 @@ export const setToken = (value: string) => {
|
|||||||
export const setUser = (value: string) => {
|
export const setUser = (value: string) => {
|
||||||
cookie.set(USER, value);
|
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