refresh token qoshildi

This commit is contained in:
Samandar Turgunboyev
2025-12-29 11:45:17 +05:00
parent 1389750ddd
commit 6370a118fe
4 changed files with 67 additions and 6 deletions

View File

@@ -1,5 +1,5 @@
import { auth_pai } from "@/features/auth/lib/api"; import { auth_pai } from "@/features/auth/lib/api";
import { saveToken } from "@/shared/lib/cookie"; import { saveRefToken, saveToken } from "@/shared/lib/cookie";
import { Button } from "@/shared/ui/button"; import { Button } from "@/shared/ui/button";
import { import {
Card, Card,
@@ -41,6 +41,7 @@ const AuthLogin = () => {
}); });
saveToken(res.data.data.access); saveToken(res.data.data.access);
saveRefToken(res.data.data.refresh);
navigate("dashboard"); navigate("dashboard");
}, },
onError: (err: AxiosError) => { onError: (err: AxiosError) => {

View File

@@ -33,4 +33,5 @@ export const API_URLS = {
DeleteProdut: (id: string) => `${API_V}admin/product/${id}/delete/`, DeleteProdut: (id: string) => `${API_V}admin/product/${id}/delete/`,
QuestionnaireList: `${API_V}admin/questionnaire/list/`, QuestionnaireList: `${API_V}admin/questionnaire/list/`,
Import_User: `${API_V}admin/user/import_users/`, Import_User: `${API_V}admin/user/import_users/`,
Refresh_Token: `${API_V}accounts/refresh/token/`,
}; };

View File

@@ -1,6 +1,13 @@
import i18n from "@/shared/config/i18n"; import i18n from "@/shared/config/i18n";
import { getToken } from "@/shared/lib/cookie"; import {
import axios from "axios"; getRefToken,
getToken,
removeRefToken,
removeToken,
saveRefToken,
saveToken,
} from "@/shared/lib/cookie";
import axios, { AxiosError } from "axios";
import { API_URLS } from "./URLs"; import { API_URLS } from "./URLs";
const httpClient = axios.create({ const httpClient = axios.create({
@@ -24,9 +31,48 @@ 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) {
try {
const refToken = getRefToken();
if (!refToken) {
removeToken();
removeRefToken();
window.location.href = "/";
}
const { data } = await axios.post(
`${API_URLS.BASE_URL}${API_URLS.Refresh_Token}`,
{ refresh: refToken },
);
saveToken(data.access);
saveRefToken(data.refresh);
} catch {
removeToken();
removeRefToken();
window.location.href = "/";
}
} else if ((error as AxiosError)?.status === 401) {
try {
const refToken = getRefToken();
if (!refToken) {
removeToken();
removeRefToken();
window.location.href = "/";
}
const { data } = await axios.post(
`${API_URLS.BASE_URL}${API_URLS.Refresh_Token}`,
{ refresh: refToken },
);
saveToken(data.access);
saveRefToken(data.refresh);
} catch {
removeToken();
removeRefToken();
window.location.href = "/";
}
}
return Promise.reject(error); return Promise.reject(error);
}, },
); );

View File

@@ -1,6 +1,7 @@
import cookie from "js-cookie"; import cookie from "js-cookie";
const token = "access_meridyn_admin"; const token = "gastro_admin_token";
const refToken = "gastro_admin_refresh_token";
export const saveToken = (value: string) => { export const saveToken = (value: string) => {
cookie.set(token, value); cookie.set(token, value);
@@ -13,3 +14,15 @@ export const getToken = () => {
export const removeToken = () => { export const removeToken = () => {
cookie.remove(token); cookie.remove(token);
}; };
export const saveRefToken = (value: string) => {
cookie.set(refToken, value);
};
export const getRefToken = () => {
return cookie.get(refToken);
};
export const removeRefToken = () => {
cookie.remove(refToken);
};