ResendEmailConfirmation.cshtml.cs 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. using System;
  2. using System.ComponentModel.DataAnnotations;
  3. using System.Text;
  4. using System.Text.Encodings.Web;
  5. using System.Threading.Tasks;
  6. using Microsoft.AspNetCore.Authorization;
  7. using Microsoft.AspNetCore.Identity;
  8. using Microsoft.AspNetCore.Identity.UI.Services;
  9. using Microsoft.AspNetCore.Mvc;
  10. using Microsoft.AspNetCore.Mvc.RazorPages;
  11. using Microsoft.AspNetCore.WebUtilities;
  12. namespace HyperCube.Areas.Identity.Pages.Account
  13. {
  14. [AllowAnonymous]
  15. public class ResendEmailConfirmationModel : PageModel
  16. {
  17. private readonly UserManager<IdentityUser> _userManager;
  18. public ResendEmailConfirmationModel(UserManager<IdentityUser> userManager)
  19. {
  20. _userManager = userManager;
  21. }
  22. [BindProperty]
  23. public InputModel Input { get; set; }
  24. public class InputModel
  25. {
  26. [Required]
  27. [EmailAddress]
  28. public string Email { get; set; }
  29. }
  30. public void OnGet()
  31. {
  32. }
  33. public async Task<IActionResult> OnPostAsync()
  34. {
  35. if (!ModelState.IsValid)
  36. {
  37. return Page();
  38. }
  39. var user = await _userManager.FindByEmailAsync(Input.Email);
  40. if (user == null)
  41. {
  42. ModelState.AddModelError(string.Empty, "Пользователь не найден или подверждение не требуется.");
  43. return Page();
  44. }
  45. bool confirmed = await _userManager.IsEmailConfirmedAsync(user);
  46. if (confirmed)
  47. {
  48. ModelState.AddModelError(string.Empty, "Пользователь не найден или подверждение не требуется.");
  49. return Page();
  50. }
  51. var userId = await _userManager.GetUserIdAsync(user);
  52. var code = await _userManager.GenerateEmailConfirmationTokenAsync(user);
  53. code = WebEncoders.Base64UrlEncode(Encoding.UTF8.GetBytes(code));
  54. var callbackUrl = Url.Page(
  55. "/Account/ConfirmEmail",
  56. pageHandler: null,
  57. values: new { userId = userId, code = code },
  58. protocol: Request.Scheme);
  59. EmailSender emailSender = new();
  60. await emailSender.SendEmailAsync(Input.Email, "Подтверждение регистрации",
  61. $"Подтвердите регистрацию, пройдя по <a href='{HtmlEncoder.Default.Encode(callbackUrl)}'>ссылке</a>.");
  62. ModelState.AddModelError(string.Empty, "Письмо с подтверждением отправлено, проверьте почту.");
  63. return Page();
  64. }
  65. }
  66. }