Cloudtopiaa_Reseller_Frontend/src/components/AuthInitializer.tsx
2025-08-06 02:40:24 +05:30

56 lines
2.0 KiB
TypeScript

import React, { useEffect } from 'react';
import { useAppDispatch, useAppSelector } from '../store/hooks';
import { getCurrentUser, refreshUserToken } from '../store/slices/authThunks';
import { setTokens } from '../store/slices/authSlice';
const AuthInitializer: React.FC<{ children: React.ReactNode }> = ({ children }) => {
const dispatch = useAppDispatch();
const { isAuthenticated, user } = useAppSelector((state) => state.auth);
useEffect(() => {
const initializeAuth = async () => {
try {
// Check for existing tokens in localStorage
const accessToken = localStorage.getItem('accessToken');
const refreshToken = localStorage.getItem('refreshToken');
const sessionId = localStorage.getItem('sessionId');
if (accessToken && refreshToken && sessionId) {
// Set tokens in store
dispatch(setTokens({
token: accessToken,
refreshToken,
sessionId,
}));
// Try to get current user
try {
await dispatch(getCurrentUser()).unwrap();
} catch (error) {
// If getting user fails, try to refresh token
console.log('Failed to get current user, trying to refresh token...');
try {
await dispatch(refreshUserToken()).unwrap();
// Try to get user again after token refresh
await dispatch(getCurrentUser()).unwrap();
} catch (refreshError) {
console.log('Token refresh failed, clearing auth data...');
// Clear invalid tokens
localStorage.removeItem('accessToken');
localStorage.removeItem('refreshToken');
localStorage.removeItem('sessionId');
}
}
}
} catch (error) {
console.error('Auth initialization error:', error);
}
};
initializeAuth();
}, [dispatch]);
return <>{children}</>;
};
export default AuthInitializer;