// src/app/auth/login/page.tsx 'use client' import { useState, useEffect } from 'react' import { useForm } from 'react-hook-form' import { useRouter } from 'next/navigation' import Link from 'next/link' type FormData = { username: string; password: string } export default function LoginPage() { const router = useRouter() const { register, handleSubmit, formState: { errors, isSubmitting } } = useForm() const [apiError, setApiError] = useState(null) useEffect(() => { if (typeof window !== 'undefined' && localStorage.getItem('token')) { router.push('/dashboard') } }, [router]) async function onSubmit(data: FormData) { setApiError(null) try { const res = await fetch( `${process.env.NEXT_PUBLIC_API_URL}/api/auth/login/`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(data), } ) if (!res.ok) { const json = await res.json() setApiError(json.detail || 'Ошибка входа') return } const { access } = await res.json() localStorage.setItem('token', access) router.push('/dashboard') } catch { setApiError('Сетевая ошибка') } } return (
CatLink

Добро пожаловать!

Войдите в свой аккаунт CatLink

{apiError && (
{apiError}
)}
{errors.username && (
{errors.username.message}
)}
{errors.password && (
{errors.password.message}
)}

Нет аккаунта?{' '} Зарегистрироваться

) }