Esta refatoração unifica todo o sistema de login e logout da aplicação, resolvendo inconsistências e eliminando código duplicado.
Problema Anterior:
- A lógica de login estava espalhada por múltiplos componentes e páginas (`/doctor/login`, `/patient/login`, etc.).
- Cada layout de área restrita (`DoctorLayout`, `PatientLayout`, etc.) tinha sua própria lógica de verificação de segurança e logout, resultando em bugs (ex: uso de Cookies vs. localStorage).
Solução Aplicada:
- Foi criado um componente `LoginForm` unificado e inteligente, responsável por toda a interação de login.
- Toda a lógica de comunicação com a API de autenticação foi centralizada no serviço `api.mjs`, incluindo uma nova função `api.logout()`.
- Todos os layouts de áreas restritas (`DoctorLayout`, `PatientLayout`, etc.) foram padronizados para usar `localStorage.getItem('token')` para verificação e para chamar `api.logout()` ao sair.
- As páginas de login específicas de cada perfil foram atualizadas para usar o novo `LoginForm` genérico.
31 lines
1.4 KiB
TypeScript
31 lines
1.4 KiB
TypeScript
// Caminho: app/(doctor)/login/page.tsx
|
|
|
|
import { LoginForm } from "@/components/LoginForm";
|
|
import Link from "next/link"; // Adicionado para o link de "Voltar"
|
|
|
|
export default function DoctorLoginPage() {
|
|
// NOTA: Esta página se tornou obsoleta com a criação do /login central.
|
|
// O ideal no futuro é deletar esta página e redirecionar os usuários.
|
|
|
|
return (
|
|
<div className="min-h-screen bg-gradient-to-br from-green-50 via-white to-green-50 flex items-center justify-center p-4">
|
|
<div className="w-full max-w-md text-center">
|
|
<h1 className="text-3xl font-bold text-foreground mb-2">Área do Médico</h1>
|
|
<p className="text-muted-foreground mb-8">Acesse o sistema médico</p>
|
|
|
|
{/* --- ALTERAÇÃO PRINCIPAL AQUI --- */}
|
|
{/* Chamando o LoginForm unificado sem props desnecessárias */}
|
|
<LoginForm>
|
|
{/* Adicionamos um link de "Voltar" como filho (children) */}
|
|
<div className="mt-6 text-center text-sm">
|
|
<Link href="/">
|
|
<span className="font-semibold text-primary hover:underline cursor-pointer">
|
|
Voltar à página inicial
|
|
</span>
|
|
</Link>
|
|
</div>
|
|
</LoginForm>
|
|
</div>
|
|
</div>
|
|
);
|
|
} |