[untested] - code checkout in remote
This commit is contained in:
@@ -63,8 +63,8 @@ const App = () => {
|
||||
path="/*"
|
||||
element={
|
||||
// isOnline ? (
|
||||
// isAuthenticate || isAuthenticatedInCookie === "true" ? (
|
||||
localStorage.getItem('accessToken') && localStorage.getItem('refreshToken') ? (
|
||||
isAuthenticate || isAuthenticatedInCookie === "true" ? (
|
||||
// localStorage.getItem('accessToken') && localStorage.getItem('refreshToken') ? (
|
||||
// true ? (
|
||||
<DefaultLayout isOnline={isOnline} />
|
||||
) : (
|
||||
|
||||
@@ -104,15 +104,15 @@ const DashboardLayout = ({ isOnline }) => {
|
||||
|
||||
const { data, refetch } = useProfileQuery();
|
||||
|
||||
useEffect(() => {
|
||||
if (
|
||||
!localStorage.getItem("accessToken") &&
|
||||
!localStorage.getItem("refreshToken")
|
||||
) {
|
||||
logOutHandler();
|
||||
return navigate("/login");
|
||||
}
|
||||
}, []);
|
||||
// useEffect(() => {
|
||||
// if (
|
||||
// !localStorage.getItem("accessToken") &&
|
||||
// !localStorage.getItem("refreshToken")
|
||||
// ) {
|
||||
// logOutHandler();
|
||||
// return navigate("/login");
|
||||
// }
|
||||
// }, []);
|
||||
|
||||
useEffect(() => {
|
||||
const savedIndex = localStorage.getItem("openAccordionIndex");
|
||||
|
||||
@@ -1,83 +1,55 @@
|
||||
import { createApi, fetchBaseQuery } from "@reduxjs/toolkit/query/react";
|
||||
|
||||
// Define a base query function with RTK Query
|
||||
// export const baseQuery = fetchBaseQuery({
|
||||
// baseUrl: 'https://sprint4.tanami.betadelivery.com/api/v1',
|
||||
// prepareHeaders: (headers) => {
|
||||
// const token = localStorage.getItem('accessToken');
|
||||
// if (token) {
|
||||
// headers.set('x-auth-token', `${token}`);
|
||||
// }
|
||||
// return headers;
|
||||
// },
|
||||
// });
|
||||
|
||||
// Define a base query function with token refresh logic
|
||||
export const baseQuery = async (args, api, extraOptions) => {
|
||||
let result = await fetchBaseQuery({
|
||||
let { data, error, } = await fetchBaseQuery({
|
||||
baseUrl: import.meta.env.VITE_BAS_URL,
|
||||
credentials: 'include',
|
||||
prepareHeaders: (headers) => {
|
||||
const token = localStorage.getItem("accessToken");
|
||||
if (token) {
|
||||
headers.set("x-auth-token", token);
|
||||
}
|
||||
headers.set('Content-Type', 'application/json',);
|
||||
return headers;
|
||||
},
|
||||
})(args, api, extraOptions);
|
||||
|
||||
if (result.error && result.error.status === 403) {
|
||||
// Handle token refresh
|
||||
const refreshToken = localStorage.getItem("refreshToken");
|
||||
console.log(refreshToken);
|
||||
if (refreshToken) {
|
||||
console.log(data);
|
||||
|
||||
|
||||
if (error) {
|
||||
if (error.status === 403) {
|
||||
try {
|
||||
const refreshResult = await fetchBaseQuery({
|
||||
const { data } = await fetchBaseQuery({
|
||||
baseUrl: import.meta.env.VITE_BAS_URL,
|
||||
})(
|
||||
{
|
||||
url: "/auth/user/regenerate-token",
|
||||
method: "POST",
|
||||
body: { refreshToken },
|
||||
},
|
||||
api,
|
||||
extraOptions
|
||||
);
|
||||
|
||||
if (refreshResult.data) {
|
||||
// Save new tokens
|
||||
localStorage.setItem("accessToken", refreshResult?.data?.data?.access?.token);
|
||||
// localStorage.setItem("role", refreshResult?.data?.data?.role);
|
||||
// console.log(refreshResult?.data?.data?.role);
|
||||
|
||||
|
||||
// Retry the original request with the new token
|
||||
result = await fetchBaseQuery({
|
||||
if (data) {
|
||||
return await fetchBaseQuery({
|
||||
baseUrl: import.meta.env.VITE_BAS_URL,
|
||||
credentials: 'include',
|
||||
prepareHeaders: (headers) => {
|
||||
const token = localStorage.getItem("accessToken");
|
||||
if (token) {
|
||||
headers.set("x-auth-token", token);
|
||||
}
|
||||
headers.set('Content-Type', 'application/json',);
|
||||
return headers;
|
||||
},
|
||||
}
|
||||
})(args, api, extraOptions);
|
||||
}else{
|
||||
|
||||
console.log('refresh failed');
|
||||
localStorage.clear();
|
||||
window.location.href = '/login'; // Redirect to login page
|
||||
|
||||
}
|
||||
}
|
||||
} catch (err) {
|
||||
console.error("Failed to refresh token:", err);
|
||||
localStorage.clear();
|
||||
window.location.href = '/login'; // Redirect to login page
|
||||
// Handle refresh failure (e.g., redirect to login)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
else if (error.status === 401) {
|
||||
localStorage.clear();
|
||||
window.location.href = '/login';
|
||||
}
|
||||
return data;
|
||||
};
|
||||
|
||||
// Create an RTK Query API slice
|
||||
@@ -85,27 +57,23 @@ export const apiSlice = createApi({
|
||||
reducerPath: "api",
|
||||
baseQuery: baseQuery,
|
||||
endpoints: (builder) => ({
|
||||
|
||||
login: builder.mutation({
|
||||
query: (credentials) => ({
|
||||
url: "/auth/admin",
|
||||
method: "POST",
|
||||
body: credentials,
|
||||
}),
|
||||
async onQueryStarted(arg, { dispatch, queryFulfilled }) {
|
||||
async onQueryStarted(arg, { queryFulfilled }) {
|
||||
try {
|
||||
const { data } = await queryFulfilled;
|
||||
// Store tokens in local storage
|
||||
localStorage.setItem("accessToken", data?.data?.access?.token);
|
||||
|
||||
localStorage.setItem("refreshToken", data?.data?.refresh?.token);
|
||||
// localStorage.setItem('refreshTokenExp', data?.data?.refresh?.expires);
|
||||
localStorage.setItem("accessTokenExp", data?.data?.access?.expires);
|
||||
localStorage.setItem("role", data?.data?.role);
|
||||
} catch (error) {
|
||||
console.error("Login failed:", error);
|
||||
}
|
||||
},
|
||||
}),
|
||||
|
||||
refreshToken: builder.mutation({
|
||||
query: (refreshToken) => ({
|
||||
url: "/auth/user/regenerate-token",
|
||||
@@ -114,7 +82,6 @@ export const apiSlice = createApi({
|
||||
}),
|
||||
}),
|
||||
|
||||
|
||||
logout: builder.mutation({
|
||||
query: () => ({
|
||||
url: "/auth/admin/logout",
|
||||
@@ -122,9 +89,6 @@ export const apiSlice = createApi({
|
||||
}),
|
||||
}),
|
||||
|
||||
|
||||
|
||||
|
||||
}),
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user