diff --git a/src/App.jsx b/src/App.jsx index 3de530a..a17dd8e 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -1,6 +1,7 @@ import { BrowserRouter, Routes, Route, Navigate } from 'react-router-dom'; import { AuthProvider, useAuth } from './context/AuthContext'; import LoginPage from './pages/LoginPage'; +import RegisterPage from './pages/RegisterPage'; import HomePage from './pages/HomePage'; import AdminPage from './pages/AdminPage'; @@ -16,6 +17,7 @@ function AppRoutes() { return ( : } /> + : } /> } /> { e.preventDefault(); @@ -58,6 +60,7 @@ export default function LoginPage() { /> + {justRegistered &&

회원가입이 완료되었습니다. 로그인해주세요.

} {error &&

{error}

} + 계정이 없으신가요? 회원가입 메인으로 돌아가기 diff --git a/src/pages/RegisterPage.jsx b/src/pages/RegisterPage.jsx new file mode 100644 index 0000000..48a4cc4 --- /dev/null +++ b/src/pages/RegisterPage.jsx @@ -0,0 +1,94 @@ +import { useState } from 'react'; +import { useNavigate, Link } from 'react-router-dom'; +import { register } from '../api/auth'; +import './LoginPage.css'; + +export default function RegisterPage() { + const [username, setUsername] = useState(''); + const [password, setPassword] = useState(''); + const [confirm, setConfirm] = useState(''); + const [error, setError] = useState(''); + const [loading, setLoading] = useState(false); + const navigate = useNavigate(); + + const handleSubmit = async (e) => { + e.preventDefault(); + setError(''); + + if (password !== confirm) { + setError('비밀번호가 일치하지 않습니다.'); + return; + } + if (password.length < 6) { + setError('비밀번호는 6자 이상이어야 합니다.'); + return; + } + + setLoading(true); + try { + await register(username, password); + navigate('/login', { state: { registered: true } }); + } catch (err) { + setError(err.message || '회원가입에 실패했습니다.'); + } finally { + setLoading(false); + } + }; + + return ( +
+
+
+

A301

+

MULTIPLAYER

+
+ +
+
+ + setUsername(e.target.value)} + placeholder="아이디를 입력하세요" + autoComplete="username" + /> +
+ +
+ + setPassword(e.target.value)} + placeholder="6자 이상 입력하세요" + autoComplete="new-password" + /> +
+ +
+ + setConfirm(e.target.value)} + placeholder="비밀번호를 다시 입력하세요" + autoComplete="new-password" + /> +
+ + {error &&

{error}

} + + +
+ + 이미 계정이 있으신가요? 로그인 +
+
+ ); +}