@page "/Account/Manage/TwoFactorAuthentication" @using Microsoft.AspNetCore.Http.Features @using Microsoft.AspNetCore.Identity @using IR.Blazor.Data @inject UserManager UserManager @inject SignInManager SignInManager @inject IdentityUserAccessor UserAccessor @inject IdentityRedirectManager RedirectManager Two-factor authentication (2FA)

Two-factor authentication (2FA)

@if (canTrack) { if (is2faEnabled) { if (recoveryCodesLeft == 0) {
You have no recovery codes left.

You must generate a new set of recovery codes before you can log in with a recovery code.

} else if (recoveryCodesLeft == 1) {
You have 1 recovery code left.

You can generate a new set of recovery codes.

} else if (recoveryCodesLeft <= 3) {
You have @recoveryCodesLeft recovery codes left.

You should generate a new set of recovery codes.

} if (isMachineRemembered) {
} Disable 2FA Reset recovery codes }

Authenticator app

@if (!hasAuthenticator) { Add authenticator app } else { Set up authenticator app Reset authenticator app } } else {
Privacy and cookie policy have not been accepted.

You must accept the policy before you can enable two factor authentication.

} @code { private bool canTrack; private bool hasAuthenticator; private int recoveryCodesLeft; private bool is2faEnabled; private bool isMachineRemembered; [CascadingParameter] private HttpContext HttpContext { get; set; } = default!; protected override async Task OnInitializedAsync() { var user = await UserAccessor.GetRequiredUserAsync(HttpContext); canTrack = HttpContext.Features.Get()?.CanTrack ?? true; hasAuthenticator = await UserManager.GetAuthenticatorKeyAsync(user) is not null; is2faEnabled = await UserManager.GetTwoFactorEnabledAsync(user); isMachineRemembered = await SignInManager.IsTwoFactorClientRememberedAsync(user); recoveryCodesLeft = await UserManager.CountRecoveryCodesAsync(user); } private async Task OnSubmitForgetBrowserAsync() { await SignInManager.ForgetTwoFactorClientAsync(); RedirectManager.RedirectToCurrentPageWithStatus( "The current browser has been forgotten. When you login again from this browser you will be prompted for your 2fa code.", HttpContext); } }