Skip to main content
Version: 3.2.0

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 loaders
  • useAuthenticationFlowGuard() - React hook version
  • AuthenticationFlowGuard - Class-based guard
  • AuthenticationFlowGuardResult - Result interface
  • AuthenticationFlowGuardOptions - 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 routes
  • configureRoutes(routes) - Configure routes with custom RoutesService
  • ACCOUNT_ROUTE_PROVIDERS - Route provider configuration object
  • accountOptionsFactory(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 keys
  • eAccountRouteNames - Constants for route names (localization keys)

v2.4.0

February 2026

New Features

  • AuthWrapper.isMultiTenancyEnabled prop - 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 to true.

  • AccountService.apiName property - 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_ROUTES removed - This deprecated export has been removed. Use AccountProvider to configure routes.

New Features

  • useSelfRegistrationEnabled hook - 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.enableLocalLogin prop - Control visibility of local login forms:

    <AuthWrapper enableLocalLogin={false}>
    {/* Shows disabled message instead of form */}
    </AuthWrapper>

    Reads from Abp.Account.EnableLocalLogin setting by default.

  • LoginForm respects self-registration setting - Register link is automatically hidden when Abp.Account.IsSelfRegistrationEnabled is false

  • RegisterForm respects self-registration setting - Automatically redirects to login if self-registration is disabled

  • Account namespace - New TypeScript namespace with component interface types for type-safe customization

ABP Settings Support

The following ABP settings are now respected:

SettingEffect
Abp.Account.EnableLocalLoginHides username/password login when false
Abp.Account.IsSelfRegistrationEnabledHides register link/page when false

v1.1.0

January 2026

New Components

  • AuthWrapper - Wrapper component for authentication forms providing consistent layout
  • ManageProfile - Tabbed profile management interface with personal settings and password change
  • ChangePasswordForm - Password change form with validation
  • PersonalSettingsForm - User profile information editing form

See Manage Profile for usage details.


v1.0.0

January 2026

  • Version alignment with @abpjs/core

Deprecations

  • ACCOUNT_ROUTES deprecated - Routes are now configured via AccountProvider. Direct use of ACCOUNT_ROUTES is deprecated and will be removed in a future version.

v0.9.0

January 2026

Breaking Changes

  • ACCOUNT_ROUTES format changed - Now returns { routes: ABP.FullRoute[] } instead of ABP.FullRoute[]

New Features

  • AccountService - New service with findTenant() and register() 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