Release Notes
v3.2.0
February 2026
Breaking Changes
RegisterResponse.twoFactorEnabled Removed
The twoFactorEnabled property has been removed from the RegisterResponse interface:
// Before (v3.1.0)
interface RegisterResponse {
// ...
twoFactorEnabled: boolean; // ❌ Removed
// ...
}
// After (v3.2.0)
interface RegisterResponse {
tenantId: string;
userName: string;
name: string;
surname: string;
email: string;
emailConfirmed: boolean;
phoneNumber: string;
phoneNumberConfirmed: boolean;
lockoutEnabled: boolean;
lockoutEnd: string;
concurrencyStamp: string;
isDeleted: boolean;
deleterId: string;
deletionTime: string;
lastModificationTime: string;
lastModifierId: string;
creationTime: string;
creatorId: string;
id: string;
}
If you were using twoFactorEnabled from the registration response, you will need to fetch this information separately from the user's profile or settings.
v3.1.0
February 2026
New Features
AuthenticationFlowGuard
New route guard for checking authentication flow type. Blocks navigation to login/register pages when using external authentication (SSO/OAuth) and initiates the external login flow instead:
import {
authenticationFlowGuard,
useAuthenticationFlowGuard,
AuthenticationFlowGuard,
} from '@abpjs/account';
// Function-based guard (for route loaders)
const result = authenticationFlowGuard({
isInternalAuth: false, // true for password auth, false for SSO
initLogin: () => auth.login(),
});
if (!result.canActivate) {
// Navigation blocked, login initiated
console.log(result.reason); // 'external_auth'
}
// React hook version
function ProtectedRoute({ children }) {
const auth = useAuth();
const canActivate = useAuthenticationFlowGuard({
isInternalAuth: true,
initLogin: auth.login,
});
if (!canActivate) {
return null; // Login redirect in progress
}
return children;
}
// Class-based version
const guard = new AuthenticationFlowGuard(
isInternalAuth,
() => auth.login()
);
if (!guard.canActivate()) {
// Navigation blocked
}
ChangePasswordForm: hideCurrentPassword Prop
New hideCurrentPassword prop for users who don't have a password (e.g., social login users):
import { ChangePasswordForm } from '@abpjs/account';
// For social login users (no current password needed)
<ChangePasswordForm hideCurrentPassword={true} />
// When undefined, automatically determined based on user's profile
<ChangePasswordForm />
ManageProfile: hideChangePasswordTab Prop
New hideChangePasswordTab prop and automatic handling for external users:
import { ManageProfile } from '@abpjs/account';
// Force hide change password tab
<ManageProfile hideChangePasswordTab={true} />
// When undefined, automatically hidden for external (social login) users
<ManageProfile />
The component now:
- Fetches the user profile on mount to determine external user status
- Shows a loading state while profile is being fetched
- Automatically hides the change password tab for external users
New Exports
Guards:
authenticationFlowGuard()- Function-based guard for route loadersuseAuthenticationFlowGuard()- React hook versionAuthenticationFlowGuard- Class-based guardAuthenticationFlowGuardResult- Result interfaceAuthenticationFlowGuardOptions- Options interface
v3.0.0
February 2026
New Features
Route Providers
New route provider system for initializing account routes:
import { initializeAccountRoutes } from '@abpjs/account';
// Call once during app initialization
initializeAccountRoutes();
// This registers:
// - /account (parent route, invisible)
// - /account/login
// - /account/register
// - /account/manage-profile
For advanced configuration with a custom RoutesService:
import { configureRoutes, ACCOUNT_ROUTE_PROVIDERS } from '@abpjs/account';
import { getRoutesService } from '@abpjs/core';
const routesService = getRoutesService();
const addRoutes = configureRoutes(routesService);
addRoutes();
Account Options Factory
New factory function for creating account options with defaults:
import { accountOptionsFactory } from '@abpjs/account';
// With custom redirect URL
const options = accountOptionsFactory({ redirectUrl: '/dashboard' });
// { redirectUrl: '/dashboard' }
// With defaults
const defaultOptions = accountOptionsFactory({});
// { redirectUrl: '/' }
Config Subpackage
The @abp/ng.account/config functionality is now merged into the main package:
// All config exports are available from the main package
import {
configureRoutes,
ACCOUNT_ROUTE_PROVIDERS,
initializeAccountRoutes,
eAccountRouteNames,
} from '@abpjs/account';
New Exports
initializeAccountRoutes()- Initialize account routesconfigureRoutes(routes)- Configure routes with custom RoutesServiceACCOUNT_ROUTE_PROVIDERS- Route provider configuration objectaccountOptionsFactory(options)- Create account options with defaults
v2.9.0
February 2026
- Version alignment with @abpjs/core
v2.7.0
February 2026
New Features
Component Replacement Keys
New constants for replacing account components:
import { eAccountComponents } from '@abpjs/account';
// Available component keys:
// eAccountComponents.Login = 'Account.LoginComponent'
// eAccountComponents.Register = 'Account.RegisterComponent'
// eAccountComponents.ManageProfile = 'Account.ManageProfileComponent'
// eAccountComponents.TenantBox = 'Account.TenantBoxComponent'
// eAccountComponents.AuthWrapper = 'Account.AuthWrapperComponent'
// eAccountComponents.ChangePassword = 'Account.ChangePasswordComponent'
// eAccountComponents.PersonalSettings = 'Account.PersonalSettingsComponent'
Route Names
New constants for account route names (localization keys):
import { eAccountRouteNames } from '@abpjs/account';
// Available route names:
// eAccountRouteNames.Account = 'AbpAccount::Menu:Account'
// eAccountRouteNames.Login = 'AbpAccount::Login'
// eAccountRouteNames.Register = 'AbpAccount::Register'
// eAccountRouteNames.ManageProfile = 'AbpAccount::ManageYourProfile'
TenantIdResponse Enhancement
The TenantIdResponse interface now includes the tenant name:
interface TenantIdResponse {
success: boolean;
tenantId: string;
name?: string; // New in v2.7.0
}
New Exports
eAccountComponents- Constants for component replacement keyseAccountRouteNames- Constants for route names (localization keys)
v2.4.0
February 2026
New Features
-
AuthWrapper.isMultiTenancyEnabledprop - Control whether the tenant box is displayed in authentication forms:import { AuthWrapper, LoginForm } from '@abpjs/account';
function LoginPage() {
return (
<AuthWrapper
mainContent={<LoginForm onSuccess={() => {}} />}
isMultiTenancyEnabled={true} // Show tenant switching (default)
/>
);
}This corresponds to Angular's
isMultiTenancyEnabled$observable. Defaults totrue. -
AccountService.apiNameproperty - New property for REST API configuration. Defaults to'default':import { useAccountService } from '@abpjs/account';
function MyComponent() {
const accountService = useAccountService();
console.log(accountService.apiName); // 'default'
}
v2.2.0
February 2026
- Version alignment with @abpjs/core
v2.1.0
February 2026
- Version alignment with @abpjs/core
v2.0.0
January 2026
Breaking Changes
ACCOUNT_ROUTESremoved - This deprecated export has been removed. UseAccountProviderto configure routes.
New Features
-
useSelfRegistrationEnabledhook - Check if self-registration is enabled from ABP settings:import { useSelfRegistrationEnabled } from '@abpjs/account';
function RegisterLink() {
const isEnabled = useSelfRegistrationEnabled();
if (!isEnabled) return null;
return <Link to="/register">Register</Link>;
} -
AuthWrapper.enableLocalLoginprop - Control visibility of local login forms:<AuthWrapper enableLocalLogin={false}>
{/* Shows disabled message instead of form */}
</AuthWrapper>Reads from
Abp.Account.EnableLocalLoginsetting by default. -
LoginFormrespects self-registration setting - Register link is automatically hidden whenAbp.Account.IsSelfRegistrationEnabledisfalse -
RegisterFormrespects self-registration setting - Automatically redirects to login if self-registration is disabled -
Accountnamespace - New TypeScript namespace with component interface types for type-safe customization
ABP Settings Support
The following ABP settings are now respected:
| Setting | Effect |
|---|---|
Abp.Account.EnableLocalLogin | Hides username/password login when false |
Abp.Account.IsSelfRegistrationEnabled | Hides register link/page when false |
v1.1.0
January 2026
New Components
AuthWrapper- Wrapper component for authentication forms providing consistent layoutManageProfile- Tabbed profile management interface with personal settings and password changeChangePasswordForm- Password change form with validationPersonalSettingsForm- User profile information editing form
See Manage Profile for usage details.
v1.0.0
January 2026
- Version alignment with @abpjs/core
Deprecations
ACCOUNT_ROUTESdeprecated - Routes are now configured viaAccountProvider. Direct use ofACCOUNT_ROUTESis deprecated and will be removed in a future version.
v0.9.0
January 2026
Breaking Changes
ACCOUNT_ROUTESformat changed - Now returns{ routes: ABP.FullRoute[] }instead ofABP.FullRoute[]
New Features
- AccountService - New service with
findTenant()andregister()methods - useAccountService hook - Access AccountService in components
- RegisterForm now functional - Makes actual API calls and auto-logs in users
- TenantBox API integration - Validates tenant names via API, updates Redux session
New Types
RegisterRequest,RegisterResponse,TenantIdResponse
v0.8.0
January 2026
- Version alignment with @abpjs/core
v0.7.6
January 2026 - Initial Release
- LoginForm component
- RegisterForm component
- TenantBox component
- OAuth2 resource owner password flow