diff --git a/src/components/auth/LoginForm.tsx b/src/components/auth/LoginForm.tsx index 15f7920..335a999 100644 --- a/src/components/auth/LoginForm.tsx +++ b/src/components/auth/LoginForm.tsx @@ -44,17 +44,25 @@ export function LoginForm({ userType, onLogin, onRegisterClick }: LoginFormProps if (error) throw error; - const userRole = data.user?.user_metadata?.role; + if (!data.user) { + throw new Error('Usuário não encontrado'); + } - switch (userRole) { - case 'student': - navigate('/aluno'); + const userRole = data.user.user_metadata?.role; + + if (userRole !== userType) { + throw new Error(`Este não é um login de ${userTypeLabels[userType]}`); + } + + switch (userType) { + case 'school': + navigate('/dashboard'); break; case 'teacher': navigate('/professor'); break; - case 'school': - navigate('/dashboard'); + case 'student': + navigate('/aluno'); break; default: throw new Error('Tipo de usuário inválido'); @@ -62,7 +70,11 @@ export function LoginForm({ userType, onLogin, onRegisterClick }: LoginFormProps } catch (err) { console.error('Erro no login:', err); - setError('Email ou senha incorretos'); + if (err instanceof Error) { + setError(err.message); + } else { + setError('Email ou senha incorretos'); + } } finally { setLoading(false); } diff --git a/src/hooks/useAuth.tsx b/src/hooks/useAuth.tsx index b40a92e..dad3a9f 100644 --- a/src/hooks/useAuth.tsx +++ b/src/hooks/useAuth.tsx @@ -23,6 +23,11 @@ export function AuthProvider({ children }: { children: React.ReactNode }) { setUser(session?.user ?? null); setUserRole(session?.user?.user_metadata?.role ?? null); setLoading(false); + + if (session?.user) { + const role = session.user.user_metadata?.role; + handleRedirect(role); + } }; fetchSession(); @@ -32,20 +37,9 @@ export function AuthProvider({ children }: { children: React.ReactNode }) { setUserRole(session?.user?.user_metadata?.role ?? null); setLoading(false); - // Redirecionar baseado no evento de autenticação - if (event === 'SIGNED_IN') { - const role = session?.user?.user_metadata?.role; - switch (role) { - case 'student': - navigate('/aluno'); - break; - case 'teacher': - navigate('/professor'); - break; - case 'school': - navigate('/dashboard'); - break; - } + if (event === 'SIGNED_IN' && session?.user) { + const role = session.user.user_metadata?.role; + handleRedirect(role); } else if (event === 'SIGNED_OUT') { navigate('/'); } @@ -56,6 +50,22 @@ 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('/'); diff --git a/src/routes.tsx b/src/routes.tsx index 2455538..7790987 100644 --- a/src/routes.tsx +++ b/src/routes.tsx @@ -20,6 +20,7 @@ import { StudentStoriesPage } from './pages/student-dashboard/StudentStoriesPage import { CreateStoryPage } from './pages/student-dashboard/CreateStoryPage'; import { StoryPage } from './pages/student-dashboard/StoryPage'; import { ProtectedRoute } from './components/auth/ProtectedRoute'; +import { UserManagementPage } from './pages/admin/UserManagementPage'; export const router = createBrowserRouter([ { @@ -156,5 +157,13 @@ export const router = createBrowserRouter([ ] } ] + }, + { + path: '/admin/users', + element: ( + + + + ), } ]); \ No newline at end of file