From c0aa725fa6f02797db37199822f40805a6af1703 Mon Sep 17 00:00:00 2001 From: Lucas Santana Date: Fri, 20 Dec 2024 12:10:37 -0300 Subject: [PATCH] =?UTF-8?q?fix:=20corrige=20redirecionamento=20ap=C3=B3s?= =?UTF-8?q?=20login?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Ajusta ordem de redirecionamento no LoginForm para priorizar escola - Centraliza lógica de redirecionamento no handleRedirect do useAuth - Adiciona redirecionamento automático ao carregar sessão existente - Melhora tratamento de eventos de autenticação --- src/components/auth/LoginForm.tsx | 26 +++++++++++++++------ src/hooks/useAuth.tsx | 38 +++++++++++++++++++------------ src/routes.tsx | 9 ++++++++ 3 files changed, 52 insertions(+), 21 deletions(-) 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