| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- using System.Collections.Generic;
- using System.ComponentModel.DataAnnotations;
- using System.Linq;
- using System.Text;
- using System.Text.Encodings.Web;
- using System.Threading.Tasks;
- using Microsoft.AspNetCore.Authentication;
- using Microsoft.AspNetCore.Authorization;
- using Microsoft.AspNetCore.Identity;
- using Microsoft.AspNetCore.Identity.UI.Services;
- using Microsoft.AspNetCore.Mvc;
- using Microsoft.AspNetCore.Mvc.RazorPages;
- using Microsoft.AspNetCore.WebUtilities;
- using Microsoft.Extensions.Logging;
-
- namespace SecureSharing.Areas.Identity.Pages.Account;
-
- [AllowAnonymous]
- public sealed class RegisterModel : PageModel
- {
- private readonly IEmailSender _emailSender;
- private readonly ILogger<RegisterModel> _logger;
- private readonly SignInManager<IdentityUser> _signInManager;
- private readonly UserManager<IdentityUser> _userManager;
-
- public RegisterModel(
- UserManager<IdentityUser> userManager,
- SignInManager<IdentityUser> signInManager,
- ILogger<RegisterModel> logger,
- IEmailSender emailSender)
- {
- _userManager = userManager;
- _signInManager = signInManager;
- _logger = logger;
- _emailSender = emailSender;
- }
-
- [BindProperty] public InputModel Input { get; set; }
-
- public string ReturnUrl { get; set; }
-
- public IList<AuthenticationScheme> ExternalLogins { get; set; }
-
- public async Task OnGetAsync(string returnUrl = null)
- {
- ReturnUrl = returnUrl;
- ExternalLogins = (await _signInManager.GetExternalAuthenticationSchemesAsync()).ToList();
- }
-
- public async Task<IActionResult> OnPostAsync(string returnUrl = null)
- {
- returnUrl ??= Url.Content("~/");
- ExternalLogins = (await _signInManager.GetExternalAuthenticationSchemesAsync()).ToList();
- if (ModelState.IsValid)
- {
- var user = new IdentityUser { UserName = Input.Email, Email = Input.Email };
- var result = await _userManager.CreateAsync(user, Input.Password);
- if (result.Succeeded)
- {
- _logger.LogInformation("User created a new account with password.");
-
- var code = await _userManager.GenerateEmailConfirmationTokenAsync(user);
- code = WebEncoders.Base64UrlEncode(Encoding.UTF8.GetBytes(code));
- var callbackUrl = Url.Page(
- "/Account/ConfirmEmail",
- null,
- new { area = "Identity", userId = user.Id, code, returnUrl },
- Request.Scheme);
-
- await _emailSender.SendEmailAsync(Input.Email, "Confirm your email",
- $"Please confirm your account by <a href='{HtmlEncoder.Default.Encode(callbackUrl)}'>clicking here</a>.");
-
- if (_userManager.Options.SignIn.RequireConfirmedAccount)
- {
- return RedirectToPage("RegisterConfirmation", new { email = Input.Email, returnUrl });
- }
-
- await _signInManager.SignInAsync(user, false);
- return LocalRedirect(returnUrl);
- }
-
- foreach (var error in result.Errors) ModelState.AddModelError(string.Empty, error.Description);
- }
-
- // If we got this far, something failed, redisplay form
- return Page();
- }
-
- public sealed class InputModel
- {
- [Required]
- [EmailAddress]
- [Display(Name = "Email")]
- public string Email { 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 = "Password")]
- public string Password { get; set; }
-
- [DataType(DataType.Password)]
- [Display(Name = "Confirm password")]
- [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
- public string ConfirmPassword { get; set; }
- }
- }
|