diff --git a/src/app/login/page.tsx b/src/app/login/page.tsx index 8523639..fdc11cc 100644 --- a/src/app/login/page.tsx +++ b/src/app/login/page.tsx @@ -2,7 +2,7 @@ 'use client'; -import { AlertCircle, CheckCircle } from 'lucide-react'; +import { AlertCircle, CheckCircle, Eye, EyeOff } from 'lucide-react'; import { useRouter, useSearchParams } from 'next/navigation'; import { Suspense, useEffect, useState } from 'react'; @@ -75,6 +75,8 @@ function LoginPageClient() { const [error, setError] = useState(null); const [loading, setLoading] = useState(false); const [shouldAskUsername, setShouldAskUsername] = useState(false); + const [rememberPassword, setRememberPassword] = useState(false); + const [showPassword, setShowPassword] = useState(false); const { siteName } = useSite(); @@ -82,7 +84,26 @@ function LoginPageClient() { useEffect(() => { if (typeof window !== 'undefined') { const storageType = (window as any).RUNTIME_CONFIG?.STORAGE_TYPE; - setShouldAskUsername(storageType && storageType !== 'localstorage'); + const shouldAsk = storageType && storageType !== 'localstorage'; + setShouldAskUsername(shouldAsk); + + // 从localStorage读取记住的密码信息 + const rememberedCredentials = localStorage.getItem('rememberedCredentials'); + if (rememberedCredentials) { + try { + const credentials = JSON.parse(rememberedCredentials); + if (credentials.password) { + setPassword(credentials.password); + } + if (credentials.username && shouldAsk) { + setUsername(credentials.username); + } + setRememberPassword(true); + } catch (error) { + // 清除无效的数据 + localStorage.removeItem('rememberedCredentials'); + } + } } }, []); @@ -104,6 +125,19 @@ function LoginPageClient() { }); if (res.ok) { + // 处理记住密码逻辑 + if (rememberPassword) { + const credentials: any = { password }; + // 如果需要用户名且有用户名,就保存用户名 + if (shouldAskUsername && username) { + credentials.username = username; + } + localStorage.setItem('rememberedCredentials', JSON.stringify(credentials)); + } else { + // 如果不记住密码,清除已存储的信息 + localStorage.removeItem('rememberedCredentials'); + } + const redirect = searchParams.get('redirect') || '/'; router.replace(redirect); } else if (res.status === 401) { @@ -152,21 +186,51 @@ function LoginPageClient() { - setPassword(e.target.value)} - /> +
+ setPassword(e.target.value)} + /> + +
{error && (

{error}

)} + {/* 记住密码复选框 */} +
+ setRememberPassword(e.target.checked)} + /> + +
+ {/* 登录按钮 */}