import React, { useState } from 'react'; import { useAuth } from '../contexts/AuthContext'; import { useLanguage } from '../contexts/LanguageContext'; import { t } from '../i18n/translations'; import { ArrowLeft } from 'lucide-react'; export function RegisterPage() { const { language } = useLanguage(); const { register, completeRegistration } = useAuth(); const [step, setStep] = useState<'register' | 'setup-otp' | 'verify-otp'>('register'); const [email, setEmail] = useState(''); const [password, setPassword] = useState(''); const [confirmPassword, setConfirmPassword] = useState(''); const [otpCode, setOtpCode] = useState(''); const [userID, setUserID] = useState(''); const [otpSecret, setOtpSecret] = useState(''); const [qrCodeURL, setQrCodeURL] = useState(''); const [error, setError] = useState(''); const [loading, setLoading] = useState(false); const handleRegister = async (e: React.FormEvent) => { e.preventDefault(); setError(''); if (password !== confirmPassword) { setError(t('passwordMismatch', language)); return; } if (password.length < 6) { setError(t('passwordTooShort', language)); return; } setLoading(true); const result = await register(email, password); if (result.success && result.userID) { setUserID(result.userID); setOtpSecret(result.otpSecret || ''); setQrCodeURL(result.qrCodeURL || ''); setStep('setup-otp'); } else { setError(result.message || t('registrationFailed', language)); } setLoading(false); }; const handleSetupComplete = () => { setStep('verify-otp'); }; const handleOTPVerify = async (e: React.FormEvent) => { e.preventDefault(); setError(''); setLoading(true); const result = await completeRegistration(userID, otpCode); if (!result.success) { setError(result.message || t('registrationFailed', language)); } // 成功的话AuthContext会自动处理登录状态 setLoading(false); }; const copyToClipboard = (text: string) => { navigator.clipboard.writeText(text); }; return (
{step === 'register' && t('registerTitle', language)} {step === 'setup-otp' && t('setupTwoFactor', language)} {step === 'verify-otp' && t('verifyOTP', language)}
{t('setupTwoFactorDesc', language)}
{t('step1Title', language)}
{t('step1Desc', language)}
{t('step2Title', language)}
{t('step2Desc', language)}
{qrCodeURL && ({t('qrCodeHint', language)}
{t('otpSecret', language)}
{otpSecret}
{t('step3Title', language)}
{t('step3Desc', language)}
已有账户?{' '}