diff --git a/src/components/auth/LoginForm.tsx b/src/components/auth/LoginForm.tsx index 335a999..2fe9ef6 100644 --- a/src/components/auth/LoginForm.tsx +++ b/src/components/auth/LoginForm.tsx @@ -37,18 +37,25 @@ export function LoginForm({ userType, onLogin, onRegisterClick }: LoginFormProps setLoading(true); try { + console.log('Tentando login com:', { email, userType }); + const { data, error } = await supabase.auth.signInWithPassword({ email: email, password: password }); + console.log('Resposta do Supabase:', { data, error }); + if (error) throw error; if (!data.user) { throw new Error('Usuário não encontrado'); } - const userRole = data.user.user_metadata?.role; + const userRole = data.user.user_metadata.role; + console.log('Metadados do usuário:', data.user.user_metadata); + console.log('Role esperado:', userType); + console.log('Role atual:', userRole); if (userRole !== userType) { throw new Error(`Este não é um login de ${userTypeLabels[userType]}`); diff --git a/src/components/auth/ProtectedRoute.tsx b/src/components/auth/ProtectedRoute.tsx index b83c9cd..6c97f2c 100644 --- a/src/components/auth/ProtectedRoute.tsx +++ b/src/components/auth/ProtectedRoute.tsx @@ -1,5 +1,5 @@ import React from 'react'; -import { Navigate } from 'react-router-dom'; +import { Navigate, useLocation } from 'react-router-dom'; import { useAuth } from '../../hooks/useAuth'; interface ProtectedRouteProps { @@ -9,27 +9,38 @@ interface ProtectedRouteProps { export function ProtectedRoute({ children, allowedRoles = [] }: ProtectedRouteProps) { const { user, loading, userRole } = useAuth(); + const location = useLocation(); if (loading) { return
Carregando...
; } + // Se não houver usuário, redireciona para login if (!user) { - return ; + return ; } - if (allowedRoles.length > 0 && !allowedRoles.includes(userRole || '')) { - // Redirecionar para a página inicial apropriada baseado no papel do usuário - switch (userRole) { - case 'student': - return ; - case 'teacher': - return ; - case 'school': - return ; - default: - return ; + // Se não houver roles requeridas, permite acesso + if (allowedRoles.length === 0) { + return <>{children}; + } + + // Se o usuário não tiver o role necessário + if (!allowedRoles.includes(userRole || '')) { + console.log('Role atual:', userRole); + console.log('Roles permitidas:', allowedRoles); + + // Redireciona para a página apropriada + if (userRole === 'school') { + return ; + } else if (userRole === 'teacher') { + return ; + } else if (userRole === 'student') { + return ; } + + // Se não tiver role definido, volta para home + return ; } return <>{children}; diff --git a/src/hooks/useAuth.tsx b/src/hooks/useAuth.tsx index dad3a9f..0ea4382 100644 --- a/src/hooks/useAuth.tsx +++ b/src/hooks/useAuth.tsx @@ -20,29 +20,45 @@ export function AuthProvider({ children }: { children: React.ReactNode }) { React.useEffect(() => { const fetchSession = async () => { const { data: { session } } = await supabase.auth.getSession(); - setUser(session?.user ?? null); - setUserRole(session?.user?.user_metadata?.role ?? null); - setLoading(false); - + console.log('Sessão atual:', session); + if (session?.user) { - const role = session.user.user_metadata?.role; - handleRedirect(role); + setUser(session.user); + const role = session.user.user_metadata.role; + console.log('Role na sessão:', role); + setUserRole(role); + + if (role === 'school') { + navigate('/dashboard'); + } } + setLoading(false); }; fetchSession(); const { data: { subscription } } = supabase.auth.onAuthStateChange(async (event, session) => { - setUser(session?.user ?? null); - setUserRole(session?.user?.user_metadata?.role ?? null); - setLoading(false); + console.log('Evento de auth:', event); + console.log('Sessão no evento:', session); + + if (session?.user) { + setUser(session.user); + const role = session.user.user_metadata.role; + console.log('Role no evento:', role); + setUserRole(role); - if (event === 'SIGNED_IN' && session?.user) { - const role = session.user.user_metadata?.role; - handleRedirect(role); - } else if (event === 'SIGNED_OUT') { + if (event === 'SIGNED_IN') { + if (role === 'school') { + navigate('/dashboard'); + } + } + } else { + setUser(null); + setUserRole(null); navigate('/'); } + + setLoading(false); }); return () => { @@ -50,31 +66,15 @@ export function AuthProvider({ children }: { children: React.ReactNode }) { }; }, [navigate]); - const handleRedirect = (role: string | undefined) => { - switch (role) { - case 'school': - navigate('/dashboard'); - break; - case 'teacher': - navigate('/professor'); - break; - case 'student': - navigate('/aluno'); - break; - default: - navigate('/'); - } - }; - - const signOut = async () => { - await supabase.auth.signOut(); - navigate('/'); - }; - const value = { user, loading, - signOut, + signOut: async () => { + await supabase.auth.signOut(); + setUser(null); + setUserRole(null); + navigate('/'); + }, userRole };