From a052ec7e380dcc621f61c950e980cc6b2b5d602c Mon Sep 17 00:00:00 2001 From: amhsirak Date: Mon, 11 Nov 2024 02:13:46 +0530 Subject: [PATCH] fix: gracefully handle jwt token decoding --- src/context/auth.tsx | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/src/context/auth.tsx b/src/context/auth.tsx index 10b1039c..9980fe2d 100644 --- a/src/context/auth.tsx +++ b/src/context/auth.tsx @@ -60,18 +60,28 @@ const AuthProvider = ({ children }: AuthProviderProps) => { // Function to check token expiration const checkTokenExpiration = (token: string) => { - const decodedToken: any = jwtDecode(token); - const currentTime = Date.now(); - const tokenExpiryTime = decodedToken.exp * 1000; // Convert to milliseconds - const timeUntilExpiry = tokenExpiryTime - currentTime; + if (!token || typeof token !== 'string') { + console.warn("Invalid token provided for decoding"); + logoutUser(); + return; + } + try { + const decodedToken: any = jwtDecode(token); + const currentTime = Date.now(); + const tokenExpiryTime = decodedToken.exp * 1000; // Convert to milliseconds - if (timeUntilExpiry > 0) { - setTimeout(logoutUser, timeUntilExpiry); // Auto-logout when token expires - } else { - logoutUser(); // Immediately logout if token is expired + if (tokenExpiryTime > currentTime) { + setTimeout(logoutUser, tokenExpiryTime - currentTime); // Auto-logout when token expires + } else { + logoutUser(); // Immediately logout if token is expired + } + } catch (error) { + console.error("Error decoding token:", error); + logoutUser(); // Logout on error } }; + useEffect(() => { const storedUser = window.localStorage.getItem('user'); if (storedUser) { @@ -104,7 +114,7 @@ const AuthProvider = ({ children }: AuthProviderProps) => { return Promise.reject(error); } ); - + return ( {children}