fix: corrige redirecionamento após login

- 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
This commit is contained in:
Lucas Santana 2024-12-20 12:10:37 -03:00
parent fca293c4fc
commit c0aa725fa6
3 changed files with 52 additions and 21 deletions

View File

@ -44,17 +44,25 @@ export function LoginForm({ userType, onLogin, onRegisterClick }: LoginFormProps
if (error) throw error; if (error) throw error;
const userRole = data.user?.user_metadata?.role; if (!data.user) {
throw new Error('Usuário não encontrado');
}
switch (userRole) { const userRole = data.user.user_metadata?.role;
case 'student':
navigate('/aluno'); if (userRole !== userType) {
throw new Error(`Este não é um login de ${userTypeLabels[userType]}`);
}
switch (userType) {
case 'school':
navigate('/dashboard');
break; break;
case 'teacher': case 'teacher':
navigate('/professor'); navigate('/professor');
break; break;
case 'school': case 'student':
navigate('/dashboard'); navigate('/aluno');
break; break;
default: default:
throw new Error('Tipo de usuário inválido'); throw new Error('Tipo de usuário inválido');
@ -62,7 +70,11 @@ export function LoginForm({ userType, onLogin, onRegisterClick }: LoginFormProps
} catch (err) { } catch (err) {
console.error('Erro no login:', 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 { } finally {
setLoading(false); setLoading(false);
} }

View File

@ -23,6 +23,11 @@ export function AuthProvider({ children }: { children: React.ReactNode }) {
setUser(session?.user ?? null); setUser(session?.user ?? null);
setUserRole(session?.user?.user_metadata?.role ?? null); setUserRole(session?.user?.user_metadata?.role ?? null);
setLoading(false); setLoading(false);
if (session?.user) {
const role = session.user.user_metadata?.role;
handleRedirect(role);
}
}; };
fetchSession(); fetchSession();
@ -32,20 +37,9 @@ export function AuthProvider({ children }: { children: React.ReactNode }) {
setUserRole(session?.user?.user_metadata?.role ?? null); setUserRole(session?.user?.user_metadata?.role ?? null);
setLoading(false); setLoading(false);
// Redirecionar baseado no evento de autenticação if (event === 'SIGNED_IN' && session?.user) {
if (event === 'SIGNED_IN') { const role = session.user.user_metadata?.role;
const role = session?.user?.user_metadata?.role; handleRedirect(role);
switch (role) {
case 'student':
navigate('/aluno');
break;
case 'teacher':
navigate('/professor');
break;
case 'school':
navigate('/dashboard');
break;
}
} else if (event === 'SIGNED_OUT') { } else if (event === 'SIGNED_OUT') {
navigate('/'); navigate('/');
} }
@ -56,6 +50,22 @@ export function AuthProvider({ children }: { children: React.ReactNode }) {
}; };
}, [navigate]); }, [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 () => { const signOut = async () => {
await supabase.auth.signOut(); await supabase.auth.signOut();
navigate('/'); navigate('/');

View File

@ -20,6 +20,7 @@ import { StudentStoriesPage } from './pages/student-dashboard/StudentStoriesPage
import { CreateStoryPage } from './pages/student-dashboard/CreateStoryPage'; import { CreateStoryPage } from './pages/student-dashboard/CreateStoryPage';
import { StoryPage } from './pages/student-dashboard/StoryPage'; import { StoryPage } from './pages/student-dashboard/StoryPage';
import { ProtectedRoute } from './components/auth/ProtectedRoute'; import { ProtectedRoute } from './components/auth/ProtectedRoute';
import { UserManagementPage } from './pages/admin/UserManagementPage';
export const router = createBrowserRouter([ export const router = createBrowserRouter([
{ {
@ -156,5 +157,13 @@ export const router = createBrowserRouter([
] ]
} }
] ]
},
{
path: '/admin/users',
element: (
<ProtectedRoute allowedRoles={['admin']}>
<UserManagementPage />
</ProtectedRoute>
),
} }
]); ]);