diff --git a/web/src/pages/LoginPage.tsx b/web/src/pages/LoginPage.tsx index 7965fbc..8bab840 100644 --- a/web/src/pages/LoginPage.tsx +++ b/web/src/pages/LoginPage.tsx @@ -14,14 +14,23 @@ export function LoginPage() { const { token } = useAuth(); const { toast } = useToast(); + // Whether the initial login check has completed (used to decide when to show QR section) + const [initialCheckDone, setInitialCheckDone] = useState(false); + // Auto-check cookie on mount (lightweight, no browser opened) useEffect(() => { if (!token) return; void checkLoginCookie().then((res) => { if (res.success && res.data?.hasCookies) { - void refreshStatus(); // Only open browser if cookies exist + // Cookies exist — open browser to verify actual login state + void refreshStatus().finally(() => setInitialCheckDone(true)); + } else { + // No cookies — definitely not logged in, no need to open a browser + setInitialCheckDone(true); } - }).catch(() => {}); + }).catch(() => { + setInitialCheckDone(true); + }); }, [token, refreshStatus]); const navigate = useNavigate(); @@ -167,53 +176,55 @@ export function LoginPage() { - {/* QR Code Login */} - -

- 二维码登录 -

+ {/* QR Code Login — only shown after check completes and user is not logged in */} + {token && initialCheckDone && !status?.loggedIn && ( + +

+ 二维码登录 +

- {!qrData && !qrLoading && ( -
-

点击按钮生成登录二维码

- -
- )} - - {qrLoading && ( -
- -

生成二维码中...

-
- )} - - {qrData && ( -
-
- 登录二维码 + {!qrData && !qrLoading && ( +
+

点击按钮生成登录二维码

+
-

使用小红书 App 扫码登录

- {polling && ( -
- - - 等待扫码... {formatCountdown(countdown)} - + )} + + {qrLoading && ( +
+ +

生成二维码中...

+
+ )} + + {qrData && ( +
+
+ 登录二维码 +
+

使用小红书 App 扫码登录

+ {polling && ( +
+ + + 等待扫码... {formatCountdown(countdown)} + +
+ )} +
+ +
- )} -
- -
-
- )} - + )} + + )}
); }