'use client'; import { useEffect, useState } from 'react'; import { useRouter } from 'next/navigation'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { Label } from '@/components/ui/label'; import { toast } from 'sonner'; import { useUser } from '@/components/user-context'; const DEFAULT_USERNAME = 'baicaimiao'; const DEFAULT_PASSWORD = 'baicaimiao123'; export default function LoginPage() { const router = useRouter(); const { isAuthenticated, isInitialized, isLoading, refreshMe } = useUser(); const [username, setUsername] = useState(DEFAULT_USERNAME); const [password, setPassword] = useState(DEFAULT_PASSWORD); const [isSubmitting, setIsSubmitting] = useState(false); useEffect(() => { if (isInitialized && !isLoading && isAuthenticated) { router.replace('/'); } }, [isAuthenticated, isInitialized, isLoading, router]); const onSubmit = async (e: React.FormEvent) => { e.preventDefault(); setIsSubmitting(true); try { const res = await fetch('/api/auth/login', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ username, password }), }); const data = await res.json().catch(() => ({})); if (!res.ok) { throw new Error(data?.error || '登录失败'); } const userId = data?.user?.id as string | undefined; if (!userId) throw new Error('登录失败'); await refreshMe(); toast.success('登录成功'); router.replace('/'); } catch (err) { toast.error(err instanceof Error ? err.message : '登录失败'); } finally { setIsSubmitting(false); } }; return (
登录
setUsername(e.target.value)} />
setPassword(e.target.value)} />
); }