From 79283cf2de862f3214524becabcbc30180848c62 Mon Sep 17 00:00:00 2001 From: Hao Kung Date: Fri, 19 Jul 2019 16:23:43 -0700 Subject: [PATCH] Identity UI fixes (#11768) --- ...ft.AspNetCore.Identity.UI.netcoreapp3.0.cs | 4 +- .../Pages/V3/Account/ExternalLogin.cshtml.cs | 2 +- .../Pages/V3/Account/ForgotPassword.cshtml.cs | 2 +- .../Pages/V3/Account/Manage/Email.cshtml | 2 +- .../Pages/V3/Account/Manage/Email.cshtml.cs | 45 +++++++++------- .../Account/Manage/ExternalLogins.cshtml.cs | 7 +-- .../Pages/V3/Account/Manage/Index.cshtml.cs | 32 ++++++----- .../Pages/V3/Account/Register.cshtml.cs | 2 +- .../Pages/V4/Account/ExternalLogin.cshtml.cs | 2 +- .../Pages/V4/Account/ForgotPassword.cshtml.cs | 2 +- .../Account/Manage/DeletePersonalData.cshtml | 3 +- .../Pages/V4/Account/Manage/Disable2fa.cshtml | 3 +- .../Pages/V4/Account/Manage/Email.cshtml | 6 ++- .../Pages/V4/Account/Manage/Email.cshtml.cs | 53 +++++++++++-------- .../Account/Manage/ExternalLogins.cshtml.cs | 7 +-- .../Pages/V4/Account/Manage/Index.cshtml.cs | 32 ++++++----- .../Account/Manage/ShowRecoveryCodes.cshtml | 1 - .../Pages/V4/Account/Register.cshtml.cs | 2 +- 18 files changed, 118 insertions(+), 89 deletions(-) diff --git a/src/Identity/UI/ref/Microsoft.AspNetCore.Identity.UI.netcoreapp3.0.cs b/src/Identity/UI/ref/Microsoft.AspNetCore.Identity.UI.netcoreapp3.0.cs index dbff0d0dea..8be2ba8ab6 100644 --- a/src/Identity/UI/ref/Microsoft.AspNetCore.Identity.UI.netcoreapp3.0.cs +++ b/src/Identity/UI/ref/Microsoft.AspNetCore.Identity.UI.netcoreapp3.0.cs @@ -314,7 +314,7 @@ namespace Microsoft.AspNetCore.Identity.UI.V3.Pages.Account.Manage.Internal [Microsoft.AspNetCore.Mvc.TempDataAttribute] public string StatusMessage { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } } public virtual System.Threading.Tasks.Task OnGetAsync() { throw null; } - public virtual System.Threading.Tasks.Task OnPostAsync() { throw null; } + public virtual System.Threading.Tasks.Task OnPostChangeEmailAsync() { throw null; } public virtual System.Threading.Tasks.Task OnPostSendVerificationEmailAsync() { throw null; } public partial class InputModel { @@ -764,7 +764,7 @@ namespace Microsoft.AspNetCore.Identity.UI.V4.Pages.Account.Manage.Internal [Microsoft.AspNetCore.Mvc.TempDataAttribute] public string StatusMessage { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } } public virtual System.Threading.Tasks.Task OnGetAsync() { throw null; } - public virtual System.Threading.Tasks.Task OnPostAsync() { throw null; } + public virtual System.Threading.Tasks.Task OnPostChangeEmailAsync() { throw null; } public virtual System.Threading.Tasks.Task OnPostSendVerificationEmailAsync() { throw null; } public partial class InputModel { diff --git a/src/Identity/UI/src/Areas/Identity/Pages/V3/Account/ExternalLogin.cshtml.cs b/src/Identity/UI/src/Areas/Identity/Pages/V3/Account/ExternalLogin.cshtml.cs index 84f0a17611..df1df133f8 100644 --- a/src/Identity/UI/src/Areas/Identity/Pages/V3/Account/ExternalLogin.cshtml.cs +++ b/src/Identity/UI/src/Areas/Identity/Pages/V3/Account/ExternalLogin.cshtml.cs @@ -210,7 +210,7 @@ namespace Microsoft.AspNetCore.Identity.UI.V3.Pages.Account.Internal var callbackUrl = Url.Page( "/Account/ConfirmEmail", pageHandler: null, - values: new { userId = userId, code = code }, + values: new { area = "Identity", userId = userId, code = code }, protocol: Request.Scheme); await _emailSender.SendEmailAsync(Input.Email, "Confirm your email", diff --git a/src/Identity/UI/src/Areas/Identity/Pages/V3/Account/ForgotPassword.cshtml.cs b/src/Identity/UI/src/Areas/Identity/Pages/V3/Account/ForgotPassword.cshtml.cs index f7aebe850b..21a414bdb2 100644 --- a/src/Identity/UI/src/Areas/Identity/Pages/V3/Account/ForgotPassword.cshtml.cs +++ b/src/Identity/UI/src/Areas/Identity/Pages/V3/Account/ForgotPassword.cshtml.cs @@ -81,7 +81,7 @@ namespace Microsoft.AspNetCore.Identity.UI.V3.Pages.Account.Internal var callbackUrl = Url.Page( "/Account/ResetPassword", pageHandler: null, - values: new { code }, + values: new { area = "Identity", code }, protocol: Request.Scheme); await _emailSender.SendEmailAsync( diff --git a/src/Identity/UI/src/Areas/Identity/Pages/V3/Account/Manage/Email.cshtml b/src/Identity/UI/src/Areas/Identity/Pages/V3/Account/Manage/Email.cshtml index e291749562..735c287802 100644 --- a/src/Identity/UI/src/Areas/Identity/Pages/V3/Account/Manage/Email.cshtml +++ b/src/Identity/UI/src/Areas/Identity/Pages/V3/Account/Manage/Email.cshtml @@ -31,7 +31,7 @@ - + diff --git a/src/Identity/UI/src/Areas/Identity/Pages/V3/Account/Manage/Email.cshtml.cs b/src/Identity/UI/src/Areas/Identity/Pages/V3/Account/Manage/Email.cshtml.cs index 009c22e9d0..10d2e56587 100644 --- a/src/Identity/UI/src/Areas/Identity/Pages/V3/Account/Manage/Email.cshtml.cs +++ b/src/Identity/UI/src/Areas/Identity/Pages/V3/Account/Manage/Email.cshtml.cs @@ -73,7 +73,7 @@ namespace Microsoft.AspNetCore.Identity.UI.V3.Pages.Account.Manage.Internal /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used /// directly from your code. This API may change or be removed in future releases. /// - public virtual Task OnPostAsync() => throw new NotImplementedException(); + public virtual Task OnPostChangeEmailAsync() => throw new NotImplementedException(); /// /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used @@ -98,15 +98,9 @@ namespace Microsoft.AspNetCore.Identity.UI.V3.Pages.Account.Manage.Internal _emailSender = emailSender; } - public override async Task OnGetAsync() + private async Task LoadAsync(TUser user) { - var user = await _userManager.GetUserAsync(User); - if (user == null) - { - return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'."); - } var email = await _userManager.GetEmailAsync(user); - Email = email; Input = new InputModel @@ -115,23 +109,34 @@ namespace Microsoft.AspNetCore.Identity.UI.V3.Pages.Account.Manage.Internal }; IsEmailConfirmed = await _userManager.IsEmailConfirmedAsync(user); - - return Page(); } - public override async Task OnPostAsync() + public override async Task OnGetAsync() { - if (!ModelState.IsValid) - { - return Page(); - } - var user = await _userManager.GetUserAsync(User); if (user == null) { return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'."); } + await LoadAsync(user); + return Page(); + } + + public override async Task OnPostChangeEmailAsync() + { + var user = await _userManager.GetUserAsync(User); + if (user == null) + { + return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'."); + } + + if (!ModelState.IsValid) + { + await LoadAsync(user); + return Page(); + } + var email = await _userManager.GetEmailAsync(user); if (Input.NewEmail != email) { @@ -141,7 +146,7 @@ namespace Microsoft.AspNetCore.Identity.UI.V3.Pages.Account.Manage.Internal var callbackUrl = Url.Page( "/Account/ConfirmEmailChange", pageHandler: null, - values: new { userId = userId, email = Input.NewEmail, code = code }, + values: new { area = "Identity", userId = userId, email = Input.NewEmail, code = code }, protocol: Request.Scheme); await _emailSender.SendEmailAsync( Input.NewEmail, @@ -172,10 +177,14 @@ namespace Microsoft.AspNetCore.Identity.UI.V3.Pages.Account.Manage.Internal var userId = await _userManager.GetUserIdAsync(user); var email = await _userManager.GetEmailAsync(user); var code = await _userManager.GenerateEmailConfirmationTokenAsync(user); + while (code.Contains('+')) + { + code = await _userManager.GenerateEmailConfirmationTokenAsync(user); + } var callbackUrl = Url.Page( "/Account/ConfirmEmail", pageHandler: null, - values: new { userId = userId, code = code }, + values: new { area = "Identity", userId = userId, code = code }, protocol: Request.Scheme); await _emailSender.SendEmailAsync( email, diff --git a/src/Identity/UI/src/Areas/Identity/Pages/V3/Account/Manage/ExternalLogins.cshtml.cs b/src/Identity/UI/src/Areas/Identity/Pages/V3/Account/Manage/ExternalLogins.cshtml.cs index 710947fa9a..1360a5431b 100644 --- a/src/Identity/UI/src/Areas/Identity/Pages/V3/Account/Manage/ExternalLogins.cshtml.cs +++ b/src/Identity/UI/src/Areas/Identity/Pages/V3/Account/Manage/ExternalLogins.cshtml.cs @@ -119,8 +119,8 @@ namespace Microsoft.AspNetCore.Identity.UI.V3.Pages.Account.Manage.Internal var result = await _userManager.RemoveLoginAsync(user, loginProvider, providerKey); if (!result.Succeeded) { - var userId = await _userManager.GetUserIdAsync(user); - throw new InvalidOperationException($"Unexpected error occurred removing external login for user with ID '{userId}'."); + StatusMessage = "The external login was not removed."; + return RedirectToPage(); } await _signInManager.RefreshSignInAsync(user); @@ -157,7 +157,8 @@ namespace Microsoft.AspNetCore.Identity.UI.V3.Pages.Account.Manage.Internal var result = await _userManager.AddLoginAsync(user, info); if (!result.Succeeded) { - throw new InvalidOperationException($"Unexpected error occurred adding external login for user with ID '{userId}'."); + StatusMessage = "The external login was not added. External logins can only be associated with one account."; + return RedirectToPage(); } // Clear the existing external cookie to ensure a clean login process diff --git a/src/Identity/UI/src/Areas/Identity/Pages/V3/Account/Manage/Index.cshtml.cs b/src/Identity/UI/src/Areas/Identity/Pages/V3/Account/Manage/Index.cshtml.cs index a95594f702..de23e60eed 100644 --- a/src/Identity/UI/src/Areas/Identity/Pages/V3/Account/Manage/Index.cshtml.cs +++ b/src/Identity/UI/src/Areas/Identity/Pages/V3/Account/Manage/Index.cshtml.cs @@ -77,13 +77,8 @@ namespace Microsoft.AspNetCore.Identity.UI.V3.Pages.Account.Manage.Internal _signInManager = signInManager; } - public override async Task OnGetAsync() + private async Task LoadAsync(TUser user) { - var user = await _userManager.GetUserAsync(User); - if (user == null) - { - return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'."); - } var userName = await _userManager.GetUserNameAsync(user); var phoneNumber = await _userManager.GetPhoneNumberAsync(user); @@ -93,31 +88,42 @@ namespace Microsoft.AspNetCore.Identity.UI.V3.Pages.Account.Manage.Internal { PhoneNumber = phoneNumber }; + } + public override async Task OnGetAsync() + { + var user = await _userManager.GetUserAsync(User); + if (user == null) + { + return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'."); + } + + await LoadAsync(user); return Page(); } public override async Task OnPostAsync() { - if (!ModelState.IsValid) - { - return Page(); - } - var user = await _userManager.GetUserAsync(User); if (user == null) { return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'."); } + if (!ModelState.IsValid) + { + await LoadAsync(user); + return Page(); + } + var phoneNumber = await _userManager.GetPhoneNumberAsync(user); if (Input.PhoneNumber != phoneNumber) { var setPhoneResult = await _userManager.SetPhoneNumberAsync(user, Input.PhoneNumber); if (!setPhoneResult.Succeeded) { - var userId = await _userManager.GetUserIdAsync(user); - throw new InvalidOperationException($"Unexpected error occurred setting phone number for user with ID '{userId}'."); + StatusMessage = "Unexpected error when trying to set phone number."; + return RedirectToPage(); } } diff --git a/src/Identity/UI/src/Areas/Identity/Pages/V3/Account/Register.cshtml.cs b/src/Identity/UI/src/Areas/Identity/Pages/V3/Account/Register.cshtml.cs index 83f63c15e5..4b2a418d8a 100644 --- a/src/Identity/UI/src/Areas/Identity/Pages/V3/Account/Register.cshtml.cs +++ b/src/Identity/UI/src/Areas/Identity/Pages/V3/Account/Register.cshtml.cs @@ -147,7 +147,7 @@ namespace Microsoft.AspNetCore.Identity.UI.V3.Pages.Account.Internal var callbackUrl = Url.Page( "/Account/ConfirmEmail", pageHandler: null, - values: new { userId = userId, code = code }, + values: new { area = "Identity", userId = userId, code = code }, protocol: Request.Scheme); await _emailSender.SendEmailAsync(Input.Email, "Confirm your email", diff --git a/src/Identity/UI/src/Areas/Identity/Pages/V4/Account/ExternalLogin.cshtml.cs b/src/Identity/UI/src/Areas/Identity/Pages/V4/Account/ExternalLogin.cshtml.cs index f075e5fe9c..c584cacd8e 100644 --- a/src/Identity/UI/src/Areas/Identity/Pages/V4/Account/ExternalLogin.cshtml.cs +++ b/src/Identity/UI/src/Areas/Identity/Pages/V4/Account/ExternalLogin.cshtml.cs @@ -210,7 +210,7 @@ namespace Microsoft.AspNetCore.Identity.UI.V4.Pages.Account.Internal var callbackUrl = Url.Page( "/Account/ConfirmEmail", pageHandler: null, - values: new { userId = userId, code = code }, + values: new { area = "Identity", userId = userId, code = code }, protocol: Request.Scheme); await _emailSender.SendEmailAsync(Input.Email, "Confirm your email", diff --git a/src/Identity/UI/src/Areas/Identity/Pages/V4/Account/ForgotPassword.cshtml.cs b/src/Identity/UI/src/Areas/Identity/Pages/V4/Account/ForgotPassword.cshtml.cs index b2b67e24c9..d607df226c 100644 --- a/src/Identity/UI/src/Areas/Identity/Pages/V4/Account/ForgotPassword.cshtml.cs +++ b/src/Identity/UI/src/Areas/Identity/Pages/V4/Account/ForgotPassword.cshtml.cs @@ -80,7 +80,7 @@ namespace Microsoft.AspNetCore.Identity.UI.V4.Pages.Account.Internal var callbackUrl = Url.Page( "/Account/ResetPassword", pageHandler: null, - values: new { code }, + values: new { area = "Identity", code }, protocol: Request.Scheme); await _emailSender.SendEmailAsync( diff --git a/src/Identity/UI/src/Areas/Identity/Pages/V4/Account/Manage/DeletePersonalData.cshtml b/src/Identity/UI/src/Areas/Identity/Pages/V4/Account/Manage/DeletePersonalData.cshtml index e1a2b7a8a2..e1896604ff 100644 --- a/src/Identity/UI/src/Areas/Identity/Pages/V4/Account/Manage/DeletePersonalData.cshtml +++ b/src/Identity/UI/src/Areas/Identity/Pages/V4/Account/Manage/DeletePersonalData.cshtml @@ -1,4 +1,4 @@ -@page +@page @model DeletePersonalDataModel @{ ViewData["Title"] = "Delete Personal Data"; @@ -9,7 +9,6 @@ diff --git a/src/Identity/UI/src/Areas/Identity/Pages/V4/Account/Manage/Disable2fa.cshtml b/src/Identity/UI/src/Areas/Identity/Pages/V4/Account/Manage/Disable2fa.cshtml index 0d25109a32..ea7b2f1180 100644 --- a/src/Identity/UI/src/Areas/Identity/Pages/V4/Account/Manage/Disable2fa.cshtml +++ b/src/Identity/UI/src/Areas/Identity/Pages/V4/Account/Manage/Disable2fa.cshtml @@ -1,4 +1,4 @@ -@page +@page @model Disable2faModel @{ ViewData["Title"] = "Disable two-factor authentication (2FA)"; @@ -10,7 +10,6 @@ - + diff --git a/src/Identity/UI/src/Areas/Identity/Pages/V4/Account/Manage/Email.cshtml.cs b/src/Identity/UI/src/Areas/Identity/Pages/V4/Account/Manage/Email.cshtml.cs index 8ac54389c1..455c3c0f71 100644 --- a/src/Identity/UI/src/Areas/Identity/Pages/V4/Account/Manage/Email.cshtml.cs +++ b/src/Identity/UI/src/Areas/Identity/Pages/V4/Account/Manage/Email.cshtml.cs @@ -72,7 +72,7 @@ namespace Microsoft.AspNetCore.Identity.UI.V4.Pages.Account.Manage.Internal /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used /// directly from your code. This API may change or be removed in future releases. /// - public virtual Task OnPostAsync() => throw new NotImplementedException(); + public virtual Task OnPostChangeEmailAsync() => throw new NotImplementedException(); /// /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used @@ -97,15 +97,9 @@ namespace Microsoft.AspNetCore.Identity.UI.V4.Pages.Account.Manage.Internal _emailSender = emailSender; } - public override async Task OnGetAsync() + private async Task LoadAsync(TUser user) { - var user = await _userManager.GetUserAsync(User); - if (user == null) - { - return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'."); - } var email = await _userManager.GetEmailAsync(user); - Email = email; Input = new InputModel @@ -114,23 +108,34 @@ namespace Microsoft.AspNetCore.Identity.UI.V4.Pages.Account.Manage.Internal }; IsEmailConfirmed = await _userManager.IsEmailConfirmedAsync(user); - - return Page(); } - public override async Task OnPostAsync() + public override async Task OnGetAsync() { - if (!ModelState.IsValid) - { - return Page(); - } - var user = await _userManager.GetUserAsync(User); if (user == null) { return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'."); } + await LoadAsync(user); + return Page(); + } + + public override async Task OnPostChangeEmailAsync() + { + var user = await _userManager.GetUserAsync(User); + if (user == null) + { + return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'."); + } + + if (!ModelState.IsValid) + { + await LoadAsync(user); + return Page(); + } + var email = await _userManager.GetEmailAsync(user); if (Input.NewEmail != email) { @@ -140,7 +145,7 @@ namespace Microsoft.AspNetCore.Identity.UI.V4.Pages.Account.Manage.Internal var callbackUrl = Url.Page( "/Account/ConfirmEmailChange", pageHandler: null, - values: new { userId = userId, email = Input.NewEmail, code = code }, + values: new { area = "Identity", userId = userId, email = Input.NewEmail, code = code }, protocol: Request.Scheme); await _emailSender.SendEmailAsync( Input.NewEmail, @@ -157,24 +162,26 @@ namespace Microsoft.AspNetCore.Identity.UI.V4.Pages.Account.Manage.Internal public override async Task OnPostSendVerificationEmailAsync() { - if (!ModelState.IsValid) - { - return Page(); - } - var user = await _userManager.GetUserAsync(User); if (user == null) { return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'."); } + if (!ModelState.IsValid) + { + await LoadAsync(user); + return Page(); + } + var userId = await _userManager.GetUserIdAsync(user); var email = await _userManager.GetEmailAsync(user); var code = await _userManager.GenerateEmailConfirmationTokenAsync(user); + code = WebEncoders.Base64UrlEncode(Encoding.UTF8.GetBytes(code)); var callbackUrl = Url.Page( "/Account/ConfirmEmail", pageHandler: null, - values: new { userId = userId, code = code }, + values: new { area = "Identity", userId = userId, code = code }, protocol: Request.Scheme); await _emailSender.SendEmailAsync( email, diff --git a/src/Identity/UI/src/Areas/Identity/Pages/V4/Account/Manage/ExternalLogins.cshtml.cs b/src/Identity/UI/src/Areas/Identity/Pages/V4/Account/Manage/ExternalLogins.cshtml.cs index a01fdd87d2..0a4754bf3a 100644 --- a/src/Identity/UI/src/Areas/Identity/Pages/V4/Account/Manage/ExternalLogins.cshtml.cs +++ b/src/Identity/UI/src/Areas/Identity/Pages/V4/Account/Manage/ExternalLogins.cshtml.cs @@ -119,8 +119,8 @@ namespace Microsoft.AspNetCore.Identity.UI.V4.Pages.Account.Manage.Internal var result = await _userManager.RemoveLoginAsync(user, loginProvider, providerKey); if (!result.Succeeded) { - var userId = await _userManager.GetUserIdAsync(user); - throw new InvalidOperationException($"Unexpected error occurred removing external login for user with ID '{userId}'."); + StatusMessage = "The external login was not removed."; + return RedirectToPage(); } await _signInManager.RefreshSignInAsync(user); @@ -157,7 +157,8 @@ namespace Microsoft.AspNetCore.Identity.UI.V4.Pages.Account.Manage.Internal var result = await _userManager.AddLoginAsync(user, info); if (!result.Succeeded) { - throw new InvalidOperationException($"Unexpected error occurred adding external login for user with ID '{userId}'."); + StatusMessage = "The external login was not added. External logins can only be associated with one account."; + return RedirectToPage(); } // Clear the existing external cookie to ensure a clean login process diff --git a/src/Identity/UI/src/Areas/Identity/Pages/V4/Account/Manage/Index.cshtml.cs b/src/Identity/UI/src/Areas/Identity/Pages/V4/Account/Manage/Index.cshtml.cs index ef8b4fa44c..452ce5bd26 100644 --- a/src/Identity/UI/src/Areas/Identity/Pages/V4/Account/Manage/Index.cshtml.cs +++ b/src/Identity/UI/src/Areas/Identity/Pages/V4/Account/Manage/Index.cshtml.cs @@ -79,13 +79,8 @@ namespace Microsoft.AspNetCore.Identity.UI.V4.Pages.Account.Manage.Internal _signInManager = signInManager; } - public override async Task OnGetAsync() + private async Task LoadAsync(TUser user) { - var user = await _userManager.GetUserAsync(User); - if (user == null) - { - return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'."); - } var userName = await _userManager.GetUserNameAsync(user); var phoneNumber = await _userManager.GetPhoneNumberAsync(user); @@ -95,31 +90,42 @@ namespace Microsoft.AspNetCore.Identity.UI.V4.Pages.Account.Manage.Internal { PhoneNumber = phoneNumber }; + } + public override async Task OnGetAsync() + { + var user = await _userManager.GetUserAsync(User); + if (user == null) + { + return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'."); + } + + await LoadAsync(user); return Page(); } public override async Task OnPostAsync() { - if (!ModelState.IsValid) - { - return Page(); - } - var user = await _userManager.GetUserAsync(User); if (user == null) { return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'."); } + if (!ModelState.IsValid) + { + await LoadAsync(user); + return Page(); + } + var phoneNumber = await _userManager.GetPhoneNumberAsync(user); if (Input.PhoneNumber != phoneNumber) { var setPhoneResult = await _userManager.SetPhoneNumberAsync(user, Input.PhoneNumber); if (!setPhoneResult.Succeeded) { - var userId = await _userManager.GetUserIdAsync(user); - throw new InvalidOperationException($"Unexpected error occurred setting phone number for user with ID '{userId}'."); + StatusMessage = "Unexpected error when trying to set phone number."; + return RedirectToPage(); } } diff --git a/src/Identity/UI/src/Areas/Identity/Pages/V4/Account/Manage/ShowRecoveryCodes.cshtml b/src/Identity/UI/src/Areas/Identity/Pages/V4/Account/Manage/ShowRecoveryCodes.cshtml index 9970402b04..79f9e480ba 100644 --- a/src/Identity/UI/src/Areas/Identity/Pages/V4/Account/Manage/ShowRecoveryCodes.cshtml +++ b/src/Identity/UI/src/Areas/Identity/Pages/V4/Account/Manage/ShowRecoveryCodes.cshtml @@ -9,7 +9,6 @@

@ViewData["Title"]