diff --git a/src/Microsoft.DotNet.Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Account/ConfirmEmail.cshtml.cs b/src/Microsoft.DotNet.Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Account/ConfirmEmail.cshtml.cs
deleted file mode 100644
index 134f874024..0000000000
--- a/src/Microsoft.DotNet.Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Account/ConfirmEmail.cshtml.cs
+++ /dev/null
@@ -1,43 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Threading.Tasks;
-using Microsoft.AspNetCore.Identity;
-using Microsoft.AspNetCore.Mvc;
-using Microsoft.AspNetCore.Mvc.RazorPages;
-using Company.WebApplication1.Data;
-
-namespace Company.WebApplication1.Pages.Account
-{
- public class ConfirmEmailModel : PageModel
- {
- private readonly UserManager _userManager;
-
- public ConfirmEmailModel(UserManager userManager)
- {
- _userManager = userManager;
- }
-
- public async Task OnGetAsync(string userId, string code)
- {
- if (userId == null || code == null)
- {
- return RedirectToPage("/Index");
- }
-
- var user = await _userManager.FindByIdAsync(userId);
- if (user == null)
- {
- throw new ApplicationException($"Unable to load user with ID '{userId}'.");
- }
-
- var result = await _userManager.ConfirmEmailAsync(user, code);
- if (!result.Succeeded)
- {
- throw new ApplicationException($"Error confirming email for user with ID '{userId}':");
- }
-
- return Page();
- }
- }
-}
diff --git a/src/Microsoft.DotNet.Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Account/ExternalLogin.cshtml b/src/Microsoft.DotNet.Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Account/ExternalLogin.cshtml
deleted file mode 100644
index 51c9b9264f..0000000000
--- a/src/Microsoft.DotNet.Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Account/ExternalLogin.cshtml
+++ /dev/null
@@ -1,33 +0,0 @@
-@page
-@model ExternalLoginModel
-@{
- ViewData["Title"] = "Register";
-}
-
-
@ViewData["Title"]
-
Associate your @Model.LoginProvider account.
-
-
-
- You've successfully authenticated with @Model.LoginProvider.
- Please enter an email address for this site below and click the Register button to finish
- logging in.
-
-
-
-
-
-
-
-
-@section Scripts {
- @await Html.PartialAsync("_ValidationScriptsPartial")
-}
diff --git a/src/Microsoft.DotNet.Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Account/ExternalLogin.cshtml.cs b/src/Microsoft.DotNet.Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Account/ExternalLogin.cshtml.cs
deleted file mode 100644
index d96924a5e3..0000000000
--- a/src/Microsoft.DotNet.Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Account/ExternalLogin.cshtml.cs
+++ /dev/null
@@ -1,137 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.ComponentModel.DataAnnotations;
-using System.Linq;
-using System.Security.Claims;
-using System.Threading.Tasks;
-using Microsoft.AspNetCore.Identity;
-using Microsoft.AspNetCore.Mvc;
-using Microsoft.AspNetCore.Mvc.RazorPages;
-using Microsoft.Extensions.Logging;
-using Company.WebApplication1.Data;
-
-namespace Company.WebApplication1.Pages.Account
-{
- public class ExternalLoginModel : PageModel
- {
- private readonly SignInManager _signInManager;
- private readonly UserManager _userManager;
- private readonly ILogger _logger;
-
- public ExternalLoginModel(
- SignInManager signInManager,
- UserManager userManager,
- ILogger logger)
- {
- _signInManager = signInManager;
- _userManager = userManager;
- _logger = logger;
- }
-
- [BindProperty]
- public InputModel Input { get; set; }
-
- public string LoginProvider { get; set; }
-
- public string ReturnUrl { get; set; }
-
- [TempData]
- public string ErrorMessage { get; set; }
-
- public class InputModel
- {
- [Required]
- [EmailAddress]
- public string Email { get; set; }
- }
-
- public IActionResult OnGetAsync()
- {
- return RedirectToPage("./Login");
- }
-
- public IActionResult OnPost(string provider, string returnUrl = null)
- {
- // Request a redirect to the external login provider.
- var redirectUrl = Url.Page("./ExternalLogin", pageHandler: "Callback", values: new { returnUrl });
- var properties = _signInManager.ConfigureExternalAuthenticationProperties(provider, redirectUrl);
- return new ChallengeResult(provider, properties);
- }
-
- public async Task OnGetCallbackAsync(string returnUrl = null, string remoteError = null)
- {
- if (remoteError != null)
- {
- ErrorMessage = $"Error from external provider: {remoteError}";
- return RedirectToPage("./Login", new { ReturnUrl = returnUrl });
- }
- var info = await _signInManager.GetExternalLoginInfoAsync();
- if (info == null)
- {
- ErrorMessage = "Error loading external login information.";
- return RedirectToPage("./Login", new { ReturnUrl = returnUrl });
- }
-
- // Sign in the user with this external login provider if the user already has a login.
- var result = await _signInManager.ExternalLoginSignInAsync(info.LoginProvider, info.ProviderKey, isPersistent: false, bypassTwoFactor: true);
- if (result.Succeeded)
- {
- _logger.LogInformation("{Name} logged in with {LoginProvider} provider.", info.Principal.Identity.Name, info.LoginProvider);
- return LocalRedirect(Url.GetLocalUrl(returnUrl));
- }
- if (result.IsLockedOut)
- {
- return RedirectToPage("./Lockout");
- }
- else
- {
- // If the user does not have an account, then ask the user to create an account.
- ReturnUrl = returnUrl;
- LoginProvider = info.LoginProvider;
- if (info.Principal.HasClaim(c => c.Type == ClaimTypes.Email))
- {
- Input = new InputModel
- {
- Email = info.Principal.FindFirstValue(ClaimTypes.Email)
- };
- }
- return Page();
- }
- }
-
- public async Task OnPostConfirmationAsync(string returnUrl = null)
- {
- // Get the information about the user from the external login provider
- var info = await _signInManager.GetExternalLoginInfoAsync();
- if (info == null)
- {
- ErrorMessage = "Error loading external login information during confirmation.";
- return RedirectToPage("./Login", new { ReturnUrl = returnUrl });
- }
-
- if (ModelState.IsValid)
- {
- var user = new ApplicationUser { UserName = Input.Email, Email = Input.Email };
- var result = await _userManager.CreateAsync(user);
- if (result.Succeeded)
- {
- result = await _userManager.AddLoginAsync(user, info);
- if (result.Succeeded)
- {
- await _signInManager.SignInAsync(user, isPersistent: false);
- _logger.LogInformation("User created an account using {Name} provider.", info.LoginProvider);
- return LocalRedirect(Url.GetLocalUrl(returnUrl));
- }
- }
- foreach (var error in result.Errors)
- {
- ModelState.AddModelError(string.Empty, error.Description);
- }
- }
-
- LoginProvider = info.LoginProvider;
- ReturnUrl = returnUrl;
- return Page();
- }
- }
-}
diff --git a/src/Microsoft.DotNet.Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Account/ForgotPassword.cshtml b/src/Microsoft.DotNet.Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Account/ForgotPassword.cshtml
deleted file mode 100644
index cd8e98cf44..0000000000
--- a/src/Microsoft.DotNet.Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Account/ForgotPassword.cshtml
+++ /dev/null
@@ -1,26 +0,0 @@
-@page
-@model ForgotPasswordModel
-@{
- ViewData["Title"] = "Forgot your password?";
-}
-
-
@ViewData["Title"]
-
Enter your email.
-
-
-
-
-
-
-
-@section Scripts {
- @await Html.PartialAsync("_ValidationScriptsPartial")
-}
diff --git a/src/Microsoft.DotNet.Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Account/ForgotPassword.cshtml.cs b/src/Microsoft.DotNet.Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Account/ForgotPassword.cshtml.cs
deleted file mode 100644
index 09d2e72e8c..0000000000
--- a/src/Microsoft.DotNet.Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Account/ForgotPassword.cshtml.cs
+++ /dev/null
@@ -1,56 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.ComponentModel.DataAnnotations;
-using System.Threading.Tasks;
-using Microsoft.AspNetCore.Identity;
-using Microsoft.AspNetCore.Mvc;
-using Microsoft.AspNetCore.Mvc.RazorPages;
-using Company.WebApplication1.Data;
-using Company.WebApplication1.Services;
-
-namespace Company.WebApplication1.Pages.Account
-{
- public class ForgotPasswordModel : PageModel
- {
- private readonly UserManager _userManager;
- private readonly IEmailSender _emailSender;
-
- public ForgotPasswordModel(UserManager userManager, IEmailSender emailSender)
- {
- _userManager = userManager;
- _emailSender = emailSender;
- }
-
- [BindProperty]
- public InputModel Input { get; set; }
-
- public class InputModel
- {
- [Required]
- [EmailAddress]
- public string Email { get; set; }
- }
-
- public async Task OnPostAsync()
- {
- if (ModelState.IsValid)
- {
- var user = await _userManager.FindByEmailAsync(Input.Email);
- if (user == null || !(await _userManager.IsEmailConfirmedAsync(user)))
- {
- // Don't reveal that the user does not exist or is not confirmed
- return RedirectToPage("./ForgotPasswordConfirmation");
- }
-
- // For more information on how to enable account confirmation and password reset please
- // visit https://go.microsoft.com/fwlink/?LinkID=532713
- var code = await _userManager.GeneratePasswordResetTokenAsync(user);
- var callbackUrl = Url.ResetPasswordCallbackLink(code, Request.Scheme);
- await _emailSender.SendResetPasswordAsync(Input.Email, callbackUrl);
- return RedirectToPage("./ForgotPasswordConfirmation");
- }
-
- return Page();
- }
- }
-}
diff --git a/src/Microsoft.DotNet.Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Account/ForgotPasswordConfirmation.cshtml b/src/Microsoft.DotNet.Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Account/ForgotPasswordConfirmation.cshtml
deleted file mode 100644
index b1139309eb..0000000000
--- a/src/Microsoft.DotNet.Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Account/ForgotPasswordConfirmation.cshtml
+++ /dev/null
@@ -1,10 +0,0 @@
-@page
-@model ForgotPasswordConfirmation
-@{
- ViewData["Title"] = "Forgot password confirmation";
-}
-
-
@ViewData["Title"]
-
- Please check your email to reset your password.
-
- There are no external authentication services configured. See this article
- for details on setting up this ASP.NET application to support logging in via external services.
-
-
-@section Scripts {
- @await Html.PartialAsync("_ValidationScriptsPartial")
-}
\ No newline at end of file
diff --git a/src/Microsoft.DotNet.Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Account/LoginWith2fa.cshtml.cs b/src/Microsoft.DotNet.Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Account/LoginWith2fa.cshtml.cs
deleted file mode 100644
index 7d117d567e..0000000000
--- a/src/Microsoft.DotNet.Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Account/LoginWith2fa.cshtml.cs
+++ /dev/null
@@ -1,95 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.ComponentModel.DataAnnotations;
-using System.Linq;
-using System.Threading.Tasks;
-using Microsoft.AspNetCore.Identity;
-using Microsoft.AspNetCore.Mvc;
-using Microsoft.AspNetCore.Mvc.RazorPages;
-using Microsoft.Extensions.Logging;
-using Company.WebApplication1.Data;
-
-namespace Company.WebApplication1.Pages.Account
-{
- public class LoginWith2faModel : PageModel
- {
- private readonly SignInManager _signInManager;
- private readonly ILogger _logger;
-
- public LoginWith2faModel(SignInManager signInManager, ILogger logger)
- {
- _signInManager = signInManager;
- _logger = logger;
- }
-
- [BindProperty]
- public InputModel Input { get; set; }
-
- public bool RememberMe { get; set; }
-
- public string ReturnUrl { get; set; }
-
- public class InputModel
- {
- [Required]
- [StringLength(7, ErrorMessage = "The {0} must be at least {2} and at max {1} characters long.", MinimumLength = 6)]
- [DataType(DataType.Text)]
- [Display(Name = "Authenticator code")]
- public string TwoFactorCode { get; set; }
-
- [Display(Name = "Remember this machine")]
- public bool RememberMachine { get; set; }
- }
-
- public async Task OnGetAsync(bool rememberMe, string returnUrl = null)
- {
- // Ensure the user has gone through the username & password screen first
- var user = await _signInManager.GetTwoFactorAuthenticationUserAsync();
-
- if (user == null)
- {
- throw new ApplicationException($"Unable to load two-factor authentication user.");
- }
-
- ReturnUrl = returnUrl;
- RememberMe = rememberMe;
-
- return Page();
- }
-
- public async Task OnPostAsync(bool rememberMe, string returnUrl = null)
- {
- if (!ModelState.IsValid)
- {
- return Page();
- }
-
- var user = await _signInManager.GetTwoFactorAuthenticationUserAsync();
- if (user == null)
- {
- throw new ApplicationException($"Unable to load two-factor authentication user.");
- }
-
- var authenticatorCode = Input.TwoFactorCode.Replace(" ", string.Empty).Replace("-", string.Empty);
-
- var result = await _signInManager.TwoFactorAuthenticatorSignInAsync(authenticatorCode, rememberMe, Input.RememberMachine);
-
- if (result.Succeeded)
- {
- _logger.LogInformation("User with ID '{UserId}' logged in with 2fa.", user.Id);
- return LocalRedirect(Url.GetLocalUrl(returnUrl));
- }
- else if (result.IsLockedOut)
- {
- _logger.LogWarning("User with ID '{UserId}' account locked out.", user.Id);
- return RedirectToPage("./Lockout");
- }
- else
- {
- _logger.LogWarning("Invalid authenticator code entered for user with ID '{UserId}'.", user.Id);
- ModelState.AddModelError(string.Empty, "Invalid authenticator code.");
- return Page();
- }
- }
- }
-}
diff --git a/src/Microsoft.DotNet.Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Account/LoginWithRecoveryCode.cshtml b/src/Microsoft.DotNet.Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Account/LoginWithRecoveryCode.cshtml
deleted file mode 100644
index 4b32c1d8ff..0000000000
--- a/src/Microsoft.DotNet.Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Account/LoginWithRecoveryCode.cshtml
+++ /dev/null
@@ -1,29 +0,0 @@
-@page
-@model LoginWithRecoveryCodeModel
-@{
- ViewData["Title"] = "Recovery code verification";
-}
-
-
@ViewData["Title"]
-
-
- You have requested to log in with a recovery code. This login will not be remembered until you provide
- an authenticator app code at log in or disable 2FA and log in again.
-
-
-
-
-
-
-
- @section Scripts {
- @await Html.PartialAsync("_ValidationScriptsPartial")
-}
\ No newline at end of file
diff --git a/src/Microsoft.DotNet.Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Account/LoginWithRecoveryCode.cshtml.cs b/src/Microsoft.DotNet.Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Account/LoginWithRecoveryCode.cshtml.cs
deleted file mode 100644
index 1293bdc66a..0000000000
--- a/src/Microsoft.DotNet.Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Account/LoginWithRecoveryCode.cshtml.cs
+++ /dev/null
@@ -1,88 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.ComponentModel.DataAnnotations;
-using System.Linq;
-using System.Threading.Tasks;
-using Microsoft.AspNetCore.Identity;
-using Microsoft.AspNetCore.Mvc;
-using Microsoft.AspNetCore.Mvc.RazorPages;
-using Microsoft.Extensions.Logging;
-using Company.WebApplication1.Data;
-
-namespace Company.WebApplication1.Pages.Account
-{
- public class LoginWithRecoveryCodeModel : PageModel
- {
- private readonly SignInManager _signInManager;
- private readonly ILogger _logger;
-
- public LoginWithRecoveryCodeModel(SignInManager signInManager, ILogger logger)
- {
- _signInManager = signInManager;
- _logger = logger;
- }
-
- [BindProperty]
- public InputModel Input { get; set; }
-
- public string ReturnUrl { get; set; }
-
- public class InputModel
- {
- [BindProperty]
- [Required]
- [DataType(DataType.Text)]
- [Display(Name = "Recovery Code")]
- public string RecoveryCode { get; set; }
- }
-
- public async Task OnGetAsync(string returnUrl = null)
- {
- // Ensure the user has gone through the username & password screen first
- var user = await _signInManager.GetTwoFactorAuthenticationUserAsync();
- if (user == null)
- {
- throw new ApplicationException($"Unable to load two-factor authentication user.");
- }
-
- ReturnUrl = returnUrl;
-
- return Page();
- }
-
- public async Task OnPostAsync(string returnUrl = null)
- {
- if (!ModelState.IsValid)
- {
- return Page();
- }
-
- var user = await _signInManager.GetTwoFactorAuthenticationUserAsync();
- if (user == null)
- {
- throw new ApplicationException($"Unable to load two-factor authentication user.");
- }
-
- var recoveryCode = Input.RecoveryCode.Replace(" ", string.Empty);
-
- var result = await _signInManager.TwoFactorRecoveryCodeSignInAsync(recoveryCode);
-
- if (result.Succeeded)
- {
- _logger.LogInformation("User with ID '{UserId}' logged in with a recovery code.", user.Id);
- return LocalRedirect(Url.GetLocalUrl(returnUrl));
- }
- if (result.IsLockedOut)
- {
- _logger.LogWarning("User with ID '{UserId}' account locked out.", user.Id);
- return RedirectToPage("./Lockout");
- }
- else
- {
- _logger.LogWarning("Invalid recovery code entered for user with ID '{UserId}' ", user.Id);
- ModelState.AddModelError(string.Empty, "Invalid recovery code entered.");
- return Page();
- }
- }
- }
-}
diff --git a/src/Microsoft.DotNet.Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Account/Manage/ChangePassword.cshtml b/src/Microsoft.DotNet.Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Account/Manage/ChangePassword.cshtml
deleted file mode 100644
index 6aa47234d1..0000000000
--- a/src/Microsoft.DotNet.Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Account/Manage/ChangePassword.cshtml
+++ /dev/null
@@ -1,35 +0,0 @@
-@page
-@model ChangePasswordModel
-@{
- ViewData["Title"] = "Change password";
-}
-
-
-
-@section Scripts {
- @await Html.PartialAsync("_ValidationScriptsPartial")
-}
diff --git a/src/Microsoft.DotNet.Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Account/Manage/ChangePassword.cshtml.cs b/src/Microsoft.DotNet.Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Account/Manage/ChangePassword.cshtml.cs
deleted file mode 100644
index 07d97806d7..0000000000
--- a/src/Microsoft.DotNet.Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Account/Manage/ChangePassword.cshtml.cs
+++ /dev/null
@@ -1,102 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.ComponentModel.DataAnnotations;
-using System.Linq;
-using System.Threading.Tasks;
-using Microsoft.AspNetCore.Identity;
-using Microsoft.AspNetCore.Mvc;
-using Microsoft.AspNetCore.Mvc.RazorPages;
-using Microsoft.Extensions.Logging;
-using Company.WebApplication1.Data;
-
-namespace Company.WebApplication1.Pages.Account.Manage
-{
- public class ChangePasswordModel : PageModel
- {
- private readonly UserManager _userManager;
- private readonly SignInManager _signInManager;
- private readonly ILogger _logger;
-
- public ChangePasswordModel(
- UserManager userManager,
- SignInManager signInManager,
- ILogger logger)
- {
- _userManager = userManager;
- _signInManager = signInManager;
- _logger = logger;
- }
-
- [BindProperty]
- public InputModel Input { get; set; }
-
- [TempData]
- public string StatusMessage { get; set; }
-
- public class InputModel
- {
- [Required]
- [DataType(DataType.Password)]
- [Display(Name = "Current password")]
- public string OldPassword { get; set; }
-
- [Required]
- [StringLength(100, ErrorMessage = "The {0} must be at least {2} and at max {1} characters long.", MinimumLength = 6)]
- [DataType(DataType.Password)]
- [Display(Name = "New password")]
- public string NewPassword { get; set; }
-
- [DataType(DataType.Password)]
- [Display(Name = "Confirm new password")]
- [Compare("NewPassword", ErrorMessage = "The new password and confirmation password do not match.")]
- public string ConfirmPassword { get; set; }
- }
-
- public async Task OnGetAsync()
- {
- var user = await _userManager.GetUserAsync(User);
- if (user == null)
- {
- throw new ApplicationException($"Unable to load user with ID '{_userManager.GetUserId(User)}'.");
- }
-
- var hasPassword = await _userManager.HasPasswordAsync(user);
- if (!hasPassword)
- {
- return RedirectToPage("./SetPassword");
- }
-
- return Page();
- }
-
- public async Task OnPostAsync()
- {
- if (!ModelState.IsValid)
- {
- return Page();
- }
-
- var user = await _userManager.GetUserAsync(User);
- if (user == null)
- {
- throw new ApplicationException($"Unable to load user with ID '{_userManager.GetUserId(User)}'.");
- }
-
- var changePasswordResult = await _userManager.ChangePasswordAsync(user, Input.OldPassword, Input.NewPassword);
- if (!changePasswordResult.Succeeded)
- {
- foreach (var error in changePasswordResult.Errors)
- {
- ModelState.AddModelError(string.Empty, error.Description);
- }
- return Page();
- }
-
- await _signInManager.SignInAsync(user, isPersistent: false);
- _logger.LogInformation("User changed their password successfully.");
- StatusMessage = "Your password has been changed.";
-
- return RedirectToPage();
- }
- }
-}
diff --git a/src/Microsoft.DotNet.Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Account/Manage/Disable2fa.cshtml b/src/Microsoft.DotNet.Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Account/Manage/Disable2fa.cshtml
deleted file mode 100644
index 954093ee3b..0000000000
--- a/src/Microsoft.DotNet.Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Account/Manage/Disable2fa.cshtml
+++ /dev/null
@@ -1,25 +0,0 @@
-@page
-@model Disable2faModel
-@{
- ViewData["Title"] = "Disable two-factor authentication (2FA)";
- ViewData["ActivePage"] = "TwoFactorAuthentication";
-}
-
-
@ViewData["Title"]
-
-
-
-
- This action only disables 2FA.
-
-
- Disabling 2FA does not change the keys used in authenticator apps. If you wish to change the key
- used in an authenticator app you should reset your authenticator keys.
-
-
-
-
-
-
diff --git a/src/Microsoft.DotNet.Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Account/Manage/Disable2fa.cshtml.cs b/src/Microsoft.DotNet.Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Account/Manage/Disable2fa.cshtml.cs
deleted file mode 100644
index be06576f2f..0000000000
--- a/src/Microsoft.DotNet.Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Account/Manage/Disable2fa.cshtml.cs
+++ /dev/null
@@ -1,61 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Threading.Tasks;
-using Microsoft.AspNetCore.Identity;
-using Microsoft.AspNetCore.Mvc;
-using Microsoft.AspNetCore.Mvc.RazorPages;
-using Microsoft.Extensions.Logging;
-using Company.WebApplication1.Data;
-
-namespace Company.WebApplication1.Pages.Account.Manage
-{
- public class Disable2faModel : PageModel
- {
- private readonly UserManager _userManager;
- private readonly ILogger _logger;
-
- public Disable2faModel(
- UserManager userManager,
- ILogger logger)
- {
- _userManager = userManager;
- _logger = logger;
- }
-
- public async Task OnGet()
- {
- var user = await _userManager.GetUserAsync(User);
- if (user == null)
- {
- throw new ApplicationException($"Unable to load user with ID '{_userManager.GetUserId(User)}'.");
- }
-
- if (!await _userManager.GetTwoFactorEnabledAsync(user))
- {
- throw new ApplicationException($"Cannot disable 2FA for user with ID '{_userManager.GetUserId(User)}' as it's not currently enabled.");
- }
-
- return Page();
- }
-
- public async Task OnPostAsync()
- {
- var user = await _userManager.GetUserAsync(User);
- if (user == null)
- {
- throw new ApplicationException($"Unable to load user with ID '{_userManager.GetUserId(User)}'.");
- }
-
- var disable2faResult = await _userManager.SetTwoFactorEnabledAsync(user, false);
- if (!disable2faResult.Succeeded)
- {
- throw new ApplicationException($"Unexpected error occurred disabling 2FA for user with ID '{_userManager.GetUserId(User)}'.");
- }
-
- _logger.LogInformation("User with ID '{UserId}' has disabled 2fa.", _userManager.GetUserId(User));
-
- return RedirectToPage("./TwoFactorAuthentication");
- }
- }
-}
\ No newline at end of file
diff --git a/src/Microsoft.DotNet.Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Account/Manage/EnableAuthenticator.cshtml b/src/Microsoft.DotNet.Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Account/Manage/EnableAuthenticator.cshtml
deleted file mode 100644
index 1d68558407..0000000000
--- a/src/Microsoft.DotNet.Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Account/Manage/EnableAuthenticator.cshtml
+++ /dev/null
@@ -1,53 +0,0 @@
-@page
-@model EnableAuthenticatorModel
-@{
- ViewData["Title"] = "Configure authenticator app";
- ViewData["ActivePage"] = "TwoFactorAuthentication";
-}
-
-
@ViewData["Title"]
-
-
To use an authenticator app go through the following steps:
-
-
-
- Download a two-factor authenticator app like Microsoft Authenticator for
- Windows Phone,
- Android and
- iOS or
- Google Authenticator for
- Android and
- iOS.
-
-
-
-
Scan the QR Code or enter this key @Model.SharedKey into your two factor authenticator app. Spaces and casing do not matter.
-
To enable QR code generation please read our documentation.
-
-
-
-
-
- Once you have scanned the QR code or input the key above, your two factor authentication app will provide you
- with a unique code. Enter the code in the confirmation box below.
-
-
-
-
-
-
-
-
-
-
-@section Scripts {
- @await Html.PartialAsync("_ValidationScriptsPartial")
-}
diff --git a/src/Microsoft.DotNet.Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Account/Manage/EnableAuthenticator.cshtml.cs b/src/Microsoft.DotNet.Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Account/Manage/EnableAuthenticator.cshtml.cs
deleted file mode 100644
index 025944c90f..0000000000
--- a/src/Microsoft.DotNet.Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Account/Manage/EnableAuthenticator.cshtml.cs
+++ /dev/null
@@ -1,138 +0,0 @@
-using System;
-using System.ComponentModel;
-using System.ComponentModel.DataAnnotations;
-using System.Collections.Generic;
-using System.Text;
-using System.Text.Encodings.Web;
-using System.Linq;
-using System.Threading.Tasks;
-using Microsoft.AspNetCore.Identity;
-using Microsoft.AspNetCore.Mvc;
-using Microsoft.AspNetCore.Mvc.RazorPages;
-using Microsoft.Extensions.Logging;
-using Company.WebApplication1.Data;
-
-namespace Company.WebApplication1.Pages.Account.Manage
-{
- public class EnableAuthenticatorModel : PageModel
- {
- private readonly UserManager _userManager;
- private readonly ILogger _logger;
- private readonly UrlEncoder _urlEncoder;
-
- private const string AuthenticatorUriFormat = "otpauth://totp/{0}:{1}?secret={2}&issuer={0}&digits=6";
-
- public EnableAuthenticatorModel(
- UserManager userManager,
- ILogger logger,
- UrlEncoder urlEncoder)
- {
- _userManager = userManager;
- _logger = logger;
- _urlEncoder = urlEncoder;
- }
-
- public string SharedKey { get; set; }
-
- public string AuthenticatorUri { get; set; }
-
- [BindProperty]
- public InputModel Input { get; set; }
-
- public class InputModel
- {
- [Required]
- [StringLength(7, ErrorMessage = "The {0} must be at least {2} and at max {1} characters long.", MinimumLength = 6)]
- [DataType(DataType.Text)]
- [Display(Name = "Verification Code")]
- public string Code { get; set; }
- }
-
- public async Task OnGetAsync()
- {
- var user = await _userManager.GetUserAsync(User);
- if (user == null)
- {
- throw new ApplicationException($"Unable to load user with ID '{_userManager.GetUserId(User)}'.");
- }
-
- await LoadSharedKeyAndQrCodeUriAsync(user);
- if (string.IsNullOrEmpty(SharedKey))
- {
- await _userManager.ResetAuthenticatorKeyAsync(user);
- await LoadSharedKeyAndQrCodeUriAsync(user);
- }
-
- return Page();
- }
-
- public async Task OnPostAsync()
- {
- var user = await _userManager.GetUserAsync(User);
- if (user == null)
- {
- throw new ApplicationException($"Unable to load user with ID '{_userManager.GetUserId(User)}'.");
- }
-
- if (!ModelState.IsValid)
- {
- await LoadSharedKeyAndQrCodeUriAsync(user);
- return Page();
- }
-
- // Strip spaces and hypens
- var verificationCode = Input.Code.Replace(" ", string.Empty).Replace("-", string.Empty);
-
- var is2faTokenValid = await _userManager.VerifyTwoFactorTokenAsync(
- user, _userManager.Options.Tokens.AuthenticatorTokenProvider, verificationCode);
-
- if (!is2faTokenValid)
- {
- ModelState.AddModelError("Input.Code", "Verification code is invalid.");
- await LoadSharedKeyAndQrCodeUriAsync(user);
- return Page();
- }
-
- await _userManager.SetTwoFactorEnabledAsync(user, true);
- _logger.LogInformation("User with ID '{UserId}' has enabled 2FA with an authenticator app.", user.Id);
- return RedirectToPage("./GenerateRecoveryCodes");
- }
-
- private async Task LoadSharedKeyAndQrCodeUriAsync(ApplicationUser user)
- {
- // Load the authenticator key & QR code URI to display on the form
- var unformattedKey = await _userManager.GetAuthenticatorKeyAsync(user);
- if (!string.IsNullOrEmpty(unformattedKey))
- {
- SharedKey = FormatKey(unformattedKey);
- AuthenticatorUri = GenerateQrCodeUri(user.Email, unformattedKey);
- }
- }
-
- private string FormatKey(string unformattedKey)
- {
- var result = new StringBuilder();
- int currentPosition = 0;
- while (currentPosition + 4 < unformattedKey.Length)
- {
- result.Append(unformattedKey.Substring(currentPosition, 4)).Append(" ");
- currentPosition += 4;
- }
- if (currentPosition < unformattedKey.Length)
- {
- result.Append(unformattedKey.Substring(currentPosition));
- }
-
- return result.ToString().ToLowerInvariant();
- }
-
- private string GenerateQrCodeUri(string email, string unformattedKey)
- {
- return string.Format(
- AuthenticatorUriFormat,
- _urlEncoder.Encode("Company.WebApplication1"),
- _urlEncoder.Encode(email),
- unformattedKey);
- }
- }
-}
diff --git a/src/Microsoft.DotNet.Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Account/Manage/ExternalLogins.cshtml b/src/Microsoft.DotNet.Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Account/Manage/ExternalLogins.cshtml
deleted file mode 100644
index ccb66a6a49..0000000000
--- a/src/Microsoft.DotNet.Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Account/Manage/ExternalLogins.cshtml
+++ /dev/null
@@ -1,52 +0,0 @@
-@page
-@model ExternalLoginsModel
-@{
- ViewData["Title"] = "Manage your external logins";
-}
-
-@Html.Partial("_StatusMessage", Model.StatusMessage)
-@if (Model.CurrentLogins?.Count > 0)
-{
-
Registered Logins
-
-
- @foreach (var login in Model.CurrentLogins)
- {
-
-
-@section Scripts {
- @await Html.PartialAsync("_ValidationScriptsPartial")
-}
diff --git a/src/Microsoft.DotNet.Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Account/Manage/Index.cshtml.cs b/src/Microsoft.DotNet.Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Account/Manage/Index.cshtml.cs
deleted file mode 100644
index cf02965dc8..0000000000
--- a/src/Microsoft.DotNet.Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Account/Manage/Index.cshtml.cs
+++ /dev/null
@@ -1,128 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.ComponentModel.DataAnnotations;
-using System.Linq;
-using System.Text.Encodings.Web;
-using System.Threading.Tasks;
-using Microsoft.AspNetCore.Identity;
-using Microsoft.AspNetCore.Mvc;
-using Microsoft.AspNetCore.Mvc.RazorPages;
-using Company.WebApplication1.Data;
-using Company.WebApplication1.Services;
-
-namespace Company.WebApplication1.Pages.Account.Manage
-{
- public partial class IndexModel : PageModel
- {
- private readonly UserManager _userManager;
- private readonly SignInManager _signInManager;
- private readonly IEmailSender _emailSender;
-
- public IndexModel(
- UserManager userManager,
- SignInManager signInManager,
- IEmailSender emailSender)
- {
- _userManager = userManager;
- _signInManager = signInManager;
- _emailSender = emailSender;
- }
-
- public string Username { get; set; }
-
- public bool IsEmailConfirmed { get; set; }
-
- [TempData]
- public string StatusMessage { get; set; }
-
- [BindProperty]
- public InputModel Input { get; set; }
-
- public class InputModel
- {
- [Required]
- [EmailAddress]
- public string Email { get; set; }
-
- [Phone]
- [Display(Name = "Phone number")]
- public string PhoneNumber { get; set; }
- }
-
- public async Task OnGetAsync()
- {
- var user = await _userManager.GetUserAsync(User);
- if (user == null)
- {
- throw new ApplicationException($"Unable to load user with ID '{_userManager.GetUserId(User)}'.");
- }
-
- Username = user.UserName;
-
- Input = new InputModel
- {
- Email = user.Email,
- PhoneNumber = user.PhoneNumber
- };
-
- IsEmailConfirmed = await _userManager.IsEmailConfirmedAsync(user);
-
- return Page();
- }
-
- public async Task OnPostAsync()
- {
- if (!ModelState.IsValid)
- {
- return Page();
- }
-
- var user = await _userManager.GetUserAsync(User);
- if (user == null)
- {
- throw new ApplicationException($"Unable to load user with ID '{_userManager.GetUserId(User)}'.");
- }
-
- if (Input.Email != user.Email)
- {
- var setEmailResult = await _userManager.SetEmailAsync(user, Input.Email);
- if (!setEmailResult.Succeeded)
- {
- throw new ApplicationException($"Unexpected error occurred setting email for user with ID '{user.Id}'.");
- }
- }
-
- if (Input.PhoneNumber != user.PhoneNumber)
- {
- var setPhoneResult = await _userManager.SetPhoneNumberAsync(user, Input.PhoneNumber);
- if (!setPhoneResult.Succeeded)
- {
- throw new ApplicationException($"Unexpected error occurred setting phone number for user with ID '{user.Id}'.");
- }
- }
-
- StatusMessage = "Your profile has been updated";
- return RedirectToPage();
- }
- public async Task OnPostSendVerificationEmailAsync()
- {
- if (!ModelState.IsValid)
- {
- return Page();
- }
-
- var user = await _userManager.GetUserAsync(User);
- if (user == null)
- {
- throw new ApplicationException($"Unable to load user with ID '{_userManager.GetUserId(User)}'.");
- }
-
- var code = await _userManager.GenerateEmailConfirmationTokenAsync(user);
- var callbackUrl = Url.EmailConfirmationLink(user.Id, code, Request.Scheme);
- await _emailSender.SendEmailConfirmationAsync(user.Email, callbackUrl);
-
- StatusMessage = "Verification email sent. Please check your email.";
- return RedirectToPage();
- }
- }
-}
diff --git a/src/Microsoft.DotNet.Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Account/Manage/ManageNavPages.cs b/src/Microsoft.DotNet.Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Account/Manage/ManageNavPages.cs
deleted file mode 100644
index 9f5b7521f0..0000000000
--- a/src/Microsoft.DotNet.Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Account/Manage/ManageNavPages.cs
+++ /dev/null
@@ -1,34 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Threading.Tasks;
-using Microsoft.AspNetCore.Mvc.Rendering;
-
-namespace Company.WebApplication1.Pages.Account.Manage
-{
- public static class ManageNavPages
- {
- public static string Index => "Index";
-
- public static string ChangePassword => "ChangePassword";
-
- public static string ExternalLogins => "ExternalLogins";
-
- public static string TwoFactorAuthentication => "TwoFactorAuthentication";
-
- public static string IndexNavClass(ViewContext viewContext) => PageNavClass(viewContext, Index);
-
- public static string ChangePasswordNavClass(ViewContext viewContext) => PageNavClass(viewContext, ChangePassword);
-
- public static string ExternalLoginsNavClass(ViewContext viewContext) => PageNavClass(viewContext, ExternalLogins);
-
- public static string TwoFactorAuthenticationNavClass(ViewContext viewContext) => PageNavClass(viewContext, TwoFactorAuthentication);
-
- public static string PageNavClass(ViewContext viewContext, string page)
- {
- var activePage = viewContext.ViewData["ActivePage"] as string
- ?? System.IO.Path.GetFileNameWithoutExtension(viewContext.ActionDescriptor.DisplayName);
- return string.Equals(activePage, page, StringComparison.OrdinalIgnoreCase) ? "active" : null;
- }
- }
-}
diff --git a/src/Microsoft.DotNet.Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Account/Manage/ResetAuthenticator.cshtml b/src/Microsoft.DotNet.Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Account/Manage/ResetAuthenticator.cshtml
deleted file mode 100644
index a9534ae257..0000000000
--- a/src/Microsoft.DotNet.Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Account/Manage/ResetAuthenticator.cshtml
+++ /dev/null
@@ -1,23 +0,0 @@
-@page
-@model ResetAuthenticatorModel
-@{
- ViewData["Title"] = "Reset authenticator key";
- ViewData["ActivePage"] = "TwoFactorAuthentication";
-}
-
-
@ViewData["Title"]
-
-
-
- If you reset your authenticator key your authenticator app will not work until you reconfigure it.
-
-
- This process disables 2FA until you verify your authenticator app and will also reset your 2FA recovery codes.
- If you do not complete your authenticator app configuration you may lose access to your account.
-
-
-
-
-
\ No newline at end of file
diff --git a/src/Microsoft.DotNet.Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Account/Manage/ResetAuthenticator.cshtml.cs b/src/Microsoft.DotNet.Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Account/Manage/ResetAuthenticator.cshtml.cs
deleted file mode 100644
index f0ed397385..0000000000
--- a/src/Microsoft.DotNet.Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Account/Manage/ResetAuthenticator.cshtml.cs
+++ /dev/null
@@ -1,51 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Threading.Tasks;
-using Microsoft.AspNetCore.Identity;
-using Microsoft.AspNetCore.Mvc;
-using Microsoft.AspNetCore.Mvc.RazorPages;
-using Microsoft.Extensions.Logging;
-using Company.WebApplication1.Data;
-
-namespace Company.WebApplication1.Pages.Account.Manage
-{
- public class ResetAuthenticatorModel : PageModel
- {
- UserManager _userManager;
- ILogger _logger;
-
- public ResetAuthenticatorModel(
- UserManager userManager,
- ILogger logger)
- {
- _userManager = userManager;
- _logger = logger;
- }
- public async Task OnGet()
- {
- var user = await _userManager.GetUserAsync(User);
- if (user == null)
- {
- throw new ApplicationException($"Unable to load user with ID '{_userManager.GetUserId(User)}'.");
- }
-
- return Page();
- }
-
- public async Task OnPostAsync()
- {
- var user = await _userManager.GetUserAsync(User);
- if (user == null)
- {
- throw new ApplicationException($"Unable to load user with ID '{_userManager.GetUserId(User)}'.");
- }
-
- await _userManager.SetTwoFactorEnabledAsync(user, false);
- await _userManager.ResetAuthenticatorKeyAsync(user);
- _logger.LogInformation("User with ID '{UserId}' has reset their authentication app key.", user.Id);
-
- return RedirectToPage("./EnableAuthenticator");
- }
- }
-}
\ No newline at end of file
diff --git a/src/Microsoft.DotNet.Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Account/Manage/SetPassword.cshtml b/src/Microsoft.DotNet.Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Account/Manage/SetPassword.cshtml
deleted file mode 100644
index 3f4544caf4..0000000000
--- a/src/Microsoft.DotNet.Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Account/Manage/SetPassword.cshtml
+++ /dev/null
@@ -1,35 +0,0 @@
-@page
-@model SetPasswordModel
-@{
- ViewData["Title"] = "Set password";
- ViewData["ActivePage"] = "ChangePassword";
-}
-
-
Associate your @ViewData["LoginProvider"] account.
-
-
-
- You've successfully authenticated with @ViewData["LoginProvider"].
- Please enter an email address for this site below and click the Register button to finish
- logging in.
-
-
- @{
- var loginProviders = (await SignInManager.GetExternalAuthenticationSchemesAsync()).ToList();
- if (loginProviders.Count == 0)
- {
-
-
- There are no external authentication services configured. See this article
- for details on setting up this ASP.NET application to support logging in via external services.
-
-
-@section Scripts {
- @await Html.PartialAsync("_ValidationScriptsPartial")
-}
\ No newline at end of file
diff --git a/src/Microsoft.DotNet.Web.ProjectTemplates/content/StarterWeb-CSharp/Areas/Identity/Views/Account/LoginWithRecoveryCode.cshtml b/src/Microsoft.DotNet.Web.ProjectTemplates/content/StarterWeb-CSharp/Areas/Identity/Views/Account/LoginWithRecoveryCode.cshtml
deleted file mode 100644
index e2eb4c5a5b..0000000000
--- a/src/Microsoft.DotNet.Web.ProjectTemplates/content/StarterWeb-CSharp/Areas/Identity/Views/Account/LoginWithRecoveryCode.cshtml
+++ /dev/null
@@ -1,28 +0,0 @@
-@model LoginWithRecoveryCodeViewModel
-@{
- ViewData["Title"] = "Recovery code verification";
-}
-
-
@ViewData["Title"]
-
-
- You have requested to login with a recovery code. This login will not be remembered until you provide
- an authenticator app code at login or disable 2FA and login again.
-
-
-
-
-
-
-
-@section Scripts {
- @await Html.PartialAsync("_ValidationScriptsPartial")
-}
\ No newline at end of file
diff --git a/src/Microsoft.DotNet.Web.ProjectTemplates/content/StarterWeb-CSharp/Areas/Identity/Views/Account/Register.cshtml b/src/Microsoft.DotNet.Web.ProjectTemplates/content/StarterWeb-CSharp/Areas/Identity/Views/Account/Register.cshtml
deleted file mode 100644
index 05c6676541..0000000000
--- a/src/Microsoft.DotNet.Web.ProjectTemplates/content/StarterWeb-CSharp/Areas/Identity/Views/Account/Register.cshtml
+++ /dev/null
@@ -1,36 +0,0 @@
-@model RegisterViewModel
-@{
- ViewData["Title"] = "Register";
-}
-
-
- Disabling 2FA does not change the keys used in authenticator apps. If you wish to change the key
- used in an authenticator app you should reset your
- authenticator keys.
-
To use an authenticator app go through the following steps:
-
-
-
- Download a two-factor authenticator app like Microsoft Authenticator for
- Windows Phone,
- Android and
- iOS or
- Google Authenticator for
- Android and
- iOS.
-
-
-
-
Scan the QR Code or enter this key @Model.SharedKey into your two factor authenticator app. Spaces and casing do not matter.
-
To enable QR code generation please read our documentation.
-
-
-
-
-
- Once you have scanned the QR code or input the key above, your two factor authentication app will provide you
- with a unique code. Enter the code in the confirmation box below.
-
-
- If you reset your authenticator key your authenticator app will not work until you reconfigure it.
-
-
- This process disables 2FA until you verify your authenticator app and will also reset your 2FA recovery codes.
- If you do not complete your authenticator app configuration you may lose access to your account.
-
-
-
-
-
\ No newline at end of file
diff --git a/src/Microsoft.DotNet.Web.ProjectTemplates/content/StarterWeb-CSharp/Areas/Identity/Views/Manage/SetPassword.cshtml b/src/Microsoft.DotNet.Web.ProjectTemplates/content/StarterWeb-CSharp/Areas/Identity/Views/Manage/SetPassword.cshtml
deleted file mode 100644
index 56c359935a..0000000000
--- a/src/Microsoft.DotNet.Web.ProjectTemplates/content/StarterWeb-CSharp/Areas/Identity/Views/Manage/SetPassword.cshtml
+++ /dev/null
@@ -1,34 +0,0 @@
-@model SetPasswordViewModel
-@{
- ViewData["Title"] = "Set password";
- ViewData.AddActivePage(ManageNavPages.ChangePassword);
-}
-
-