Register
The @abpjs/account package provides user registration components.
New in v0.9.0
RegisterForm now makes actual API calls for registration and automatically logs in the user after successful registration.
RegisterForm Component
The RegisterForm component provides a complete registration interface:
import { RegisterForm } from '@abpjs/account';
import { useNavigate } from 'react-router-dom';
function RegisterPage() {
const navigate = useNavigate();
return (
<RegisterForm
onSuccess={() => navigate('/login')}
onError={(error) => console.error('Registration failed:', error)}
showLoginLink
/>
);
}
Props
| Prop | Type | Default | Description |
|---|---|---|---|
onSuccess | () => void | - | Called after successful registration |
onError | (error: Error) => void | - | Called on registration error |
showLoginLink | boolean | false | Show "Already have an account?" link |
loginPath | string | /login | Path for login link |
Form Fields
The RegisterForm includes the following fields:
- Username - Required, validated for format
- Email - Required, validated for email format
- Password - Required, validated for strength
- Confirm Password - Must match password
Pre-built Register Page
Use the pre-built RegisterPage component:
import { RegisterPage } from '@abpjs/account';
import { Route } from 'react-router-dom';
// In your routes
<Route path="/register" element={<RegisterPage />} />
Custom Registration Form
Build a custom registration form:
import { useState } from 'react';
import { RestService } from '@abpjs/core';
import { useToaster } from '@abpjs/theme-shared';
interface RegisterInput {
userName: string;
emailAddress: string;
password: string;
appName: string;
}
function CustomRegisterForm() {
const [formData, setFormData] = useState<RegisterInput>({
userName: '',
emailAddress: '',
password: '',
appName: 'MyApp',
});
const [loading, setLoading] = useState(false);
const toaster = useToaster();
const handleSubmit = async (e: React.FormEvent) => {
e.preventDefault();
setLoading(true);
try {
await RestService.post('/api/account/register', formData);
toaster.success('Registration successful! Please login.');
} catch (error: any) {
toaster.error(error.response?.data?.error?.message || 'Registration failed');
} finally {
setLoading(false);
}
};
return (
<form onSubmit={handleSubmit}>
{/* Form fields */}
<button type="submit" disabled={loading}>
{loading ? 'Registering...' : 'Register'}
</button>
</form>
);
}
Styling
Customize the RegisterForm with Chakra UI:
import { Box, Container, Heading } from '@chakra-ui/react';
import { RegisterForm } from '@abpjs/account';
function StyledRegisterPage() {
return (
<Container maxW="md" py={20}>
<Box bg="white" p={8} borderRadius="lg" boxShadow="xl">
<Heading size="lg" mb={6} textAlign="center">
Create Account
</Heading>
<RegisterForm
onSuccess={() => {}}
showLoginLink
/>
</Box>
</Container>
);
}
Related
- Login - Login form
- Tenant Box - Multi-tenant switching