| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- import React, { useState } from 'react';
- import { Container, Typography, TextField, Button, Box, Alert, Paper } from '@mui/material';
- import { useNavigate } from 'react-router-dom';
- import { useAuth } from '../context/AuthContext';
- const Register = () => {
- const [username, setUsername] = useState('');
- const [email, setEmail] = useState('');
- const [password, setPassword] = useState('');
- const [confirmPassword, setConfirmPassword] = useState('');
- const [error, setError] = useState('');
- const { register } = useAuth();
- const navigate = useNavigate();
- const handleSubmit = async (e) => {
- e.preventDefault();
- setError('');
- if (password.length < 9) {
- setError('Password must be at least 9 characters long.');
- return;
- }
- if (password !== confirmPassword) {
- setError('Passwords do not match.');
- return;
- }
- const success = await register(username, email, password);
- if (success) {
- navigate('/login');
- } else {
- setError('Registration failed. Username or email might be taken.');
- }
- };
- return (
- <Container maxWidth="xs">
- <Paper elevation={3} sx={{ p: 4, mt: 8, display: 'flex', flexDirection: 'column', alignItems: 'center' }}>
- <Typography component="h1" variant="h5">
- Register
- </Typography>
- {error && <Alert severity="error" sx={{ mt: 2, width: '100%' }}>{error}</Alert>}
- <Box component="form" onSubmit={handleSubmit} sx={{ mt: 1, width: '100%' }}>
- <TextField
- margin="normal"
- required
- fullWidth
- id="username"
- label="Username"
- name="username"
- autoComplete="username"
- autoFocus
- value={username}
- onChange={(e) => setUsername(e.target.value)}
- />
- <TextField
- margin="normal"
- required
- fullWidth
- id="email"
- label="Email Address"
- name="email"
- autoComplete="email"
- value={email}
- onChange={(e) => setEmail(e.target.value)}
- />
- <TextField
- margin="normal"
- required
- fullWidth
- name="password"
- label="Password"
- type="password"
- id="password"
- autoComplete="new-password"
- value={password}
- onChange={(e) => setPassword(e.target.value)}
- />
- <TextField
- margin="normal"
- required
- fullWidth
- name="confirmPassword"
- label="Confirm Password"
- type="password"
- id="confirmPassword"
- autoComplete="new-password"
- value={confirmPassword}
- onChange={(e) => setConfirmPassword(e.target.value)}
- />
- <Button
- type="submit"
- fullWidth
- variant="contained"
- sx={{ mt: 3, mb: 2 }}
- >
- Register
- </Button>
- </Box>
- </Paper>
- </Container>
- );
- };
- export default Register;
|