'use client'; import { useState } from 'react'; import { useRouter } from 'next/navigation'; import { Header } from '@/components/layouts/header'; import { Card, CardContent, CardDescription, CardHeader, CardTitle, Button, Input, Label } from '@horux/shared-ui'; import { changePassword, logoutAll } from '@/lib/api/auth'; import { useAuthStore } from '@/stores/auth-store'; import { KeyRound, LogOut, Loader2, AlertCircle, CheckCircle2 } from 'lucide-react'; export default function SeguridadPage() { const router = useRouter(); const { logout } = useAuthStore(); const [currentPassword, setCurrentPassword] = useState(''); const [newPassword, setNewPassword] = useState(''); const [confirmPassword, setConfirmPassword] = useState(''); const [changing, setChanging] = useState(false); const [changeError, setChangeError] = useState(null); const [changeOk, setChangeOk] = useState(null); const [loggingOut, setLoggingOut] = useState(false); const handleChangePassword = async (e: React.FormEvent) => { e.preventDefault(); setChangeError(null); setChangeOk(null); if (newPassword.length < 8) { setChangeError('La nueva contraseña debe tener al menos 8 caracteres'); return; } if (newPassword !== confirmPassword) { setChangeError('Las contraseñas no coinciden'); return; } if (currentPassword === newPassword) { setChangeError('La nueva contraseña debe ser distinta a la actual'); return; } setChanging(true); try { const res = await changePassword(currentPassword, newPassword); setChangeOk(res.message); setCurrentPassword(''); setNewPassword(''); setConfirmPassword(''); setTimeout(() => { logout(); router.push('/login'); }, 2500); } catch (err: any) { setChangeError(err?.response?.data?.message || 'Error al cambiar contraseña'); } finally { setChanging(false); } }; const handleLogoutAll = async () => { if (!confirm('Esto cerrará todas tus sesiones activas, incluyendo esta. Tendrás que iniciar sesión de nuevo. ¿Continuar?')) return; setLoggingOut(true); try { await logoutAll(); logout(); router.push('/login'); } catch (err: any) { alert(err?.response?.data?.message || 'Error al cerrar sesiones'); setLoggingOut(false); } }; return ( <>
Cambiar contraseña Al cambiar tu contraseña, todas tus sesiones (incluyendo esta) serán cerradas por seguridad.
setCurrentPassword(e.target.value)} autoComplete="current-password" required />
setNewPassword(e.target.value)} autoComplete="new-password" minLength={8} required />

Mínimo 8 caracteres.

setConfirmPassword(e.target.value)} autoComplete="new-password" required />
{changeError && (
{changeError}
)} {changeOk && (
{changeOk}
)}
Cerrar todas las sesiones Útil si perdiste un dispositivo o sospechas que alguien accedió a tu cuenta. Tendrás que iniciar sesión de nuevo en todos tus dispositivos, incluyendo este.
); }