ConfirmEmailChange.cshtml.cs 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. using System.Text;
  2. using System.Threading.Tasks;
  3. using Microsoft.AspNetCore.Authorization;
  4. using Microsoft.AspNetCore.Identity;
  5. using Microsoft.AspNetCore.Mvc;
  6. using Microsoft.AspNetCore.Mvc.RazorPages;
  7. using Microsoft.AspNetCore.WebUtilities;
  8. namespace BO.AppServer.Web.Areas.Identity.Pages.Account
  9. {
  10. [AllowAnonymous]
  11. public class ConfirmEmailChangeModel : PageModel
  12. {
  13. private readonly UserManager<IdentityUser> _userManager;
  14. private readonly SignInManager<IdentityUser> _signInManager;
  15. public ConfirmEmailChangeModel(UserManager<IdentityUser> userManager, SignInManager<IdentityUser> signInManager)
  16. {
  17. _userManager = userManager;
  18. _signInManager = signInManager;
  19. }
  20. [TempData]
  21. public string StatusMessage { get; set; }
  22. public async Task<IActionResult> OnGetAsync(string userId, string email, string code)
  23. {
  24. if (userId == null || email == null || code == null)
  25. {
  26. return RedirectToPage("/Index");
  27. }
  28. var user = await _userManager.FindByIdAsync(userId);
  29. if (user == null)
  30. {
  31. return NotFound($"Unable to load user with ID '{userId}'.");
  32. }
  33. code = Encoding.UTF8.GetString(WebEncoders.Base64UrlDecode(code));
  34. var result = await _userManager.ChangeEmailAsync(user, email, code);
  35. if (!result.Succeeded)
  36. {
  37. StatusMessage = "Error changing email.";
  38. return Page();
  39. }
  40. // In our UI email and user name are one and the same, so when we update the email
  41. // we need to update the user name.
  42. var setUserNameResult = await _userManager.SetUserNameAsync(user, email);
  43. if (!setUserNameResult.Succeeded)
  44. {
  45. StatusMessage = "Error changing user name.";
  46. return Page();
  47. }
  48. await _signInManager.RefreshSignInAsync(user);
  49. StatusMessage = "Thank you for confirming your email change.";
  50. return Page();
  51. }
  52. }
  53. }