'use client'; import { useState, useEffect } from 'react'; import { useRouter } from 'next/navigation'; import Link from 'next/link'; import { useAuth } from '@/lib/auth'; export default function LoginPage() { const router = useRouter(); const { signIn, signInWithGitHub, signInWithGoogle, user } = useAuth(); const [email, setEmail] = useState(''); const [password, setPassword] = useState(''); const [isLoading, setIsLoading] = useState(false); const [message, setMessage] = useState({ type: '', content: '' }); // 如果用户已登录,重定向到仪表板 useEffect(() => { if (user) { router.push('/dashboard'); } }, [user, router]); const handleEmailSignIn = async (e: React.FormEvent) => { e.preventDefault(); if (!email || !password) { setMessage({ type: 'error', content: 'Please enter both email and password' }); return; } try { setIsLoading(true); setMessage({ type: '', content: '' }); const { error } = await signIn(email, password); if (error) { throw new Error(error.message); } // 登录成功后,会通过 useEffect 重定向 } catch (error) { console.error('Login error:', error); setMessage({ type: 'error', content: error instanceof Error ? error.message : 'Failed to sign in' }); setIsLoading(false); } }; const handleGitHubSignIn = async () => { try { setIsLoading(true); setMessage({ type: '', content: '' }); const { error } = await signInWithGitHub(); if (error) { throw new Error(error.message); } // 登录成功后,会通过 useEffect 重定向 } catch (error) { console.error('GitHub login error:', error); setMessage({ type: 'error', content: error instanceof Error ? error.message : 'Failed to sign in with GitHub' }); setIsLoading(false); } }; const handleGoogleSignIn = async () => { try { setIsLoading(true); setMessage({ type: '', content: '' }); const { error } = await signInWithGoogle(); if (error) { throw new Error(error.message); } // 登录成功后,会通过 useEffect 重定向 } catch (error) { console.error('Google login error:', error); setMessage({ type: 'error', content: error instanceof Error ? error.message : 'Failed to sign in with Google' }); setIsLoading(false); } }; return (
Sign in to your account to access analytics
Don't have an account?{' '} Register