diff --git a/frontend/app/(auth)/login/page.jsx b/frontend/app/(auth)/login/page.jsx index 19712da8..0222ae23 100755 --- a/frontend/app/(auth)/login/page.jsx +++ b/frontend/app/(auth)/login/page.jsx @@ -32,6 +32,24 @@ function LoginForm() { const [submitting, setSubmitting] = useState(false); const [err, setErr] = useState(""); + // Helper function to verify session is ready after login + async function verifySessionIsReady() { + const MAX_RETRIES = 5; + const RETRY_DELAY = 300; // ms + + for (let i = 0; i < MAX_RETRIES; i++) { + const me = await fetch(`${API_BASE}/api/auth/me`, { + method: "GET", + credentials: "include", + cache: "no-store", + }).then(r => r.ok ? r.json() : null).catch(() => null); + + if (me?.ok) return true; + await new Promise(resolve => setTimeout(resolve, RETRY_DELAY)); + } + return false; + } + async function onSubmit(e) { e.preventDefault(); setErr(""); @@ -68,16 +86,7 @@ function LoginForm() { // ✅ ยืนยันว่าเซสชันพร้อมใช้งานก่อน (กัน redirect วน) // ✅ รอ session ให้พร้อมจริง (retry สูงสุด ~1.5s) - let me = null, ok = false; - for (let i = 0; i < 5; i++) { - me = await fetch(`${API_BASE}/api/auth/me`, { - method: "GET", - credentials: "include", - cache: "no-store", - }).then(r => r.ok ? r.json() : null).catch(() => null); - if (me?.ok) { ok = true; break; } - await new Promise(r => setTimeout(r, 300)); // เว้นระยะ 300ms - } + const ok = await verifySessionIsReady(); if (!ok) { setErr("ล็อกอินสำเร็จ แต่ยังไม่เห็นเซสชันจากเซิร์ฟเวอร์ (ลองใหม่หรือตรวจคุกกี้)"); return; @@ -175,12 +184,23 @@ function LoginPageSkeleton() { Document Management System • LCBP3 - - - - + {/* ✅ ปรับปรุง Skeleton ให้สมจริงขึ้น */} + + + + + + + + + + + {/* ✅ เพิ่ม Skeleton สำหรับ Footer */} + + + );