diff --git a/taskncoffee-app/src/api/auth.service.js b/taskncoffee-app/src/api/auth.service.js
index 2243ae2..a8f2e8f 100644
--- a/taskncoffee-app/src/api/auth.service.js
+++ b/taskncoffee-app/src/api/auth.service.js
@@ -84,7 +84,10 @@ export const login = async (username, password) => {
export const refreshToken = async () => {
try {
- const response = await client.post(API_ENDPOINTS.AUTH.REFRESH);
+ const fingerprint = localStorage.getItem('fingerprint');
+ const response = await client.post(API_ENDPOINTS.AUTH.REFRESH, {
+ fingerprint: fingerprint,
+ });
if (response.data.access_token && response.data.token_type === 'bearer') {
localStorage.setItem('access_token', response.data.access_token);
}
@@ -92,7 +95,6 @@ export const refreshToken = async () => {
} catch (error) {
localStorage.removeItem('access_token');
localStorage.removeItem('fingerprint');
- cookies.remove('refresh_token');
throw error.response?.data || error.message;
}
};
\ No newline at end of file
diff --git a/taskncoffee-app/src/lib/utils.js b/taskncoffee-app/src/lib/utils.js
index 7df6a47..25211b5 100644
--- a/taskncoffee-app/src/lib/utils.js
+++ b/taskncoffee-app/src/lib/utils.js
@@ -7,22 +7,38 @@ export function cn(...inputs) {
return twMerge(clsx(inputs));
}
+let refreshPromise = null;
+
export async function jwtexp(token) {
+ console.log("jwtexp called from:", new Error().stack);
const decoded = decode(token);
const currentTime = Date.now() / 1000;
const tokenExp = decoded.exp;
+ console.log("Token exp:", tokenExp, "Current time:", currentTime);
+
if (tokenExp < currentTime || tokenExp - currentTime < 120) {
console.log("Token needs refresh");
- try {
- await refreshToken();
- console.log("Token refreshed successfully");
- return true;
-
- } catch (error) {
- console.error("Failed to refresh token:", error);
- return false;
+ if (refreshPromise) {
+ console.log("Refresh already in progress, waiting...");
+ return await refreshPromise;
}
+
+ refreshPromise = (async () => {
+ try {
+ console.log("Starting token refresh...");
+ await refreshToken();
+ console.log("Token refreshed successfully");
+ return true;
+ } catch (error) {
+ console.error("Failed to refresh token:", error);
+ return false;
+ } finally {
+ refreshPromise = null;
+ }
+ })();
+
+ return await refreshPromise;
}
console.log("Token is valid");
diff --git a/taskncoffee-app/src/main.jsx b/taskncoffee-app/src/main.jsx
index 560babb..c7b3634 100644
--- a/taskncoffee-app/src/main.jsx
+++ b/taskncoffee-app/src/main.jsx
@@ -5,9 +5,7 @@ import App from './App.jsx'
import { BrowserRouter } from 'react-router'
createRoot(document.getElementById('root')).render(
-
Authentication Error
+Please log in again
+ +