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.
Self-Registration Setting (v2.0.0)
If Abp.Account.IsSelfRegistrationEnabled is set to false in ABP settings, RegisterForm will automatically redirect users to the login page. Use the useSelfRegistrationEnabled hook to check this setting in custom components.
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>
);
}
Check Self-Registration Status (v2.0.0)
Use the useSelfRegistrationEnabled hook to check if registration is enabled:
import { useSelfRegistrationEnabled } from '@abpjs/account';
function ConditionalRegisterLink() {
const isEnabled = useSelfRegistrationEnabled();
if (!isEnabled) {
return <span>Registration is disabled</span>;
}
return <Link to="/register">Create an account</Link>;
}
Related
- Login - Login form
- Tenant Box - Multi-tenant switching