diff --git a/Streetwriters.Identity/Controllers/AccountController.cs b/Streetwriters.Identity/Controllers/AccountController.cs index 85a64ed..ffbc9c0 100644 --- a/Streetwriters.Identity/Controllers/AccountController.cs +++ b/Streetwriters.Identity/Controllers/AccountController.cs @@ -302,6 +302,7 @@ namespace Streetwriters.Identity.Controllers var result = await UserManager.RemovePasswordAsync(user); if (result.Succeeded) { + await MFAService.ResetMFAAsync(user); result = await UserManager.AddPasswordAsync(user, form.NewPassword); if (result.Succeeded) { diff --git a/Streetwriters.Identity/Interfaces/IMFAService.cs b/Streetwriters.Identity/Interfaces/IMFAService.cs index 7b6b556..7e3e1a9 100644 --- a/Streetwriters.Identity/Interfaces/IMFAService.cs +++ b/Streetwriters.Identity/Interfaces/IMFAService.cs @@ -28,6 +28,7 @@ namespace Streetwriters.Identity.Interfaces { Task EnableMFAAsync(User user, string primaryMethod); Task DisableMFAAsync(User user); + Task ResetMFAAsync(User user); Task SetSecondaryMethodAsync(User user, string secondaryMethod); string GetPrimaryMethod(User user); string GetSecondaryMethod(User user); diff --git a/Streetwriters.Identity/Services/MFAService.cs b/Streetwriters.Identity/Services/MFAService.cs index ece153f..f67c9e1 100644 --- a/Streetwriters.Identity/Services/MFAService.cs +++ b/Streetwriters.Identity/Services/MFAService.cs @@ -54,6 +54,7 @@ namespace Streetwriters.Identity.Services if (!result.Succeeded) return; await this.RemovePrimaryMethodAsync(user); + await this.RemoveSecondaryMethodAsync(user); await UserManager.AddClaimAsync(user, new Claim(MFAService.PRIMARY_METHOD_CLAIM, primaryMethod)); } @@ -69,6 +70,20 @@ namespace Streetwriters.Identity.Services return true; } + public async Task ResetMFAAsync(User user) + { + var result = await UserManager.SetTwoFactorEnabledAsync(user, false); + var result = await UserManager.SetTwoFactorEnabledAsync(user, true); + + await this.RemovePrimaryMethodAsync(user); + await this.RemoveSecondaryMethodAsync(user); + + await UserManager.AddClaimAsync(user, new Claim(MFAService.PRIMARY_METHOD_CLAIM, MFAMethods.Email)); + + await UserManager.ResetAuthenticatorKeyAsync(user); + return true; + } + public async Task SetSecondaryMethodAsync(User user, string secondaryMethod) { await this.ReplaceClaimAsync(user, MFAService.SECONDARY_METHOD_CLAIM, secondaryMethod);