import React, { useState } from 'react' import { useNavigate } from 'react-router-dom' import { useAuth } from '../context/AuthContext' import api from '../utils/api' function LoginPage() { const [mode, setMode] = useState('login') // 'login' or 'register' const [email, setEmail] = useState('') const [password, setPassword] = useState('') const [name, setName] = useState('') const [error, setError] = useState('') const [loading, setLoading] = useState(false) const [success, setSuccess] = useState('') const navigate = useNavigate() const { login: authLogin } = useAuth() const handleSubmit = async (e) => { e.preventDefault() setError('') setSuccess('') setLoading(true) try { if (mode === 'login') { const response = await api.login(email, password) localStorage.setItem('authToken', response.token) authLogin({ token: response.token, profile: response.profile }) navigate('/') } else { await api.register(email, password, name) setSuccess('Registrierung erfolgreich! Bitte prüfe deine E-Mails.') setMode('login') setPassword('') } } catch (err) { setError(err.message || 'Ein Fehler ist aufgetreten') } finally { setLoading(false) } } return (

🥋 Shinkan Jinkendo

Trainer- und Vereinsplattform

{mode === 'register' && (
setName(e.target.value)} required={mode === 'register'} placeholder="Dein Name" />
)}
setEmail(e.target.value)} required placeholder="name@beispiel.de" />
setPassword(e.target.value)} required placeholder="••••••••" minLength="6" />
{error && (
{error}
)} {success && (
{success}
)}

v0.1.0 • Development

) } export default LoginPage