mirror of
https://github.com/lucasrcsantana/story-generator.git
synced 2025-12-17 05:47:52 +00:00
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:
parent
fca293c4fc
commit
c0aa725fa6
@ -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);
|
||||
if (err instanceof Error) {
|
||||
setError(err.message);
|
||||
} else {
|
||||
setError('Email ou senha incorretos');
|
||||
}
|
||||
} finally {
|
||||
setLoading(false);
|
||||
}
|
||||
|
||||
@ -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('/');
|
||||
|
||||
@ -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>
|
||||
),
|
||||
}
|
||||
]);
|
||||
Loading…
Reference in New Issue
Block a user