import { useState, useEffect } from 'react' import { useSearchParams, useNavigate } from 'react-router-dom' import { verifyMagicLink, setPassword } from '../utils/api' import { X } from 'lucide-react' import './VerifyEmail.css' export default function VerifyEmail() { const [searchParams] = useSearchParams() const navigate = useNavigate() const token = searchParams.get('token') const [loading, setLoading] = useState(true) const [requiresPassword, setRequiresPassword] = useState(false) const [error, setError] = useState('') const [formData, setFormData] = useState({ password: '', confirmPassword: '', username: '', firstName: '' }) const [submitting, setSubmitting] = useState(false) useEffect(() => { if (!token) { setError('Токен не указан') setLoading(false) return } const checkToken = async () => { try { const result = await verifyMagicLink(token) if (result.requiresPassword) { setRequiresPassword(true) } else { // Уже авторизован, перенаправляем window.location.href = '/feed' } } catch (err) { setError(err.response?.data?.error || 'Неверная или устаревшая ссылка') } finally { setLoading(false) } } checkToken() }, [token]) const handleSubmit = async (e) => { e.preventDefault() setError('') // Валидация if (!formData.password || formData.password.length < 8) { setError('Пароль должен быть не менее 8 символов') return } if (formData.password !== formData.confirmPassword) { setError('Пароли не совпадают') return } if (!formData.username || formData.username.trim().length < 3) { setError('Юзернейм должен быть не менее 3 символов') return } if (!formData.firstName || formData.firstName.trim().length < 1) { setError('Никнейм обязателен') return } try { setSubmitting(true) await setPassword( token, formData.password, formData.username.trim().toLowerCase(), formData.firstName.trim() ) // Успешная регистрация, перенаправляем window.location.href = '/feed' } catch (err) { setError(err.response?.data?.error || 'Ошибка регистрации') } finally { setSubmitting(false) } } if (loading) { return (
Проверка ссылки...
{error}
Установите пароль и заполните данные профиля