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

View File

@ -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('/');

View File

@ -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: (
<ProtectedRoute allowedRoles={['admin']}>
<UserManagementPage />
</ProtectedRoute>
),
}
]);