diff --git a/src/components/ProtectedRoute.tsx b/src/components/ProtectedRoute.tsx index 922f1aa..e77545c 100644 --- a/src/components/ProtectedRoute.tsx +++ b/src/components/ProtectedRoute.tsx @@ -1,4 +1,4 @@ -import { useEffect, useState } from 'react'; +import { useEffect, useRef } from 'react'; import { useNavigate } from 'react-router-dom'; import { useAuth } from '@/hooks/useAuth'; import { Skeleton } from '@/components/ui/skeleton'; @@ -11,12 +11,12 @@ interface ProtectedRouteProps { export function ProtectedRoute({ children, requireAdmin = false }: ProtectedRouteProps) { const { user, loading: authLoading } = useAuth(); const navigate = useNavigate(); - const [hasChecked, setHasChecked] = useState(false); + const hasCheckedRef = useRef(false); useEffect(() => { - // Only run effect once after auth loading completes - if (!authLoading && !hasChecked) { - setHasChecked(true); + // Only run effect once per component mount + if (!authLoading && !hasCheckedRef.current) { + hasCheckedRef.current = true; if (!user) { // Save current URL to redirect back after login @@ -36,10 +36,10 @@ export function ProtectedRoute({ children, requireAdmin = false }: ProtectedRout } } } - }, [user, authLoading, navigate, requireAdmin, hasChecked]); + }, [user, authLoading, navigate, requireAdmin]); // Show loading skeleton while checking auth - if (authLoading || !hasChecked) { + if (authLoading) { return (