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
};