public async Task <IActionResult> OnPostAsync() { if (!ModelState.IsValid) { return(Page()); } var user = await _userManager.FindByEmailAsync(Input.Email); if (user == null) { ModelState.AddModelError(string.Empty, "Verification email sent. Please check your email."); return(Page()); } var userId = await _userManager.GetUserIdAsync(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, code }, protocol: Request.Scheme); await ToupiaoEmailSender.SendEmailAnync( _configuration, Input.Email, "Confirm your email", $"Please confirm your account by <a href='{HtmlEncoder.Default.Encode(callbackUrl)}'>clicking here</a>."); ModelState.AddModelError(string.Empty, "Verification email sent. Please check your email."); return(Page()); }
public async Task <IActionResult> 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); code = WebEncoders .Base64UrlEncode(Encoding.UTF8.GetBytes(code)); var callbackUrl = Url.Page( "/Account/ResetPassword", pageHandler: null, values: new { area = "Identity", code }, protocol: Request.Scheme); await ToupiaoEmailSender.SendEmailAnync( _configuration, Input.Email, "Reset Password", $"Please reset your password by <a href='{HtmlEncoder.Default.Encode(callbackUrl)}'>clicking here</a>."); return(RedirectToPage("./ForgotPasswordConfirmation")); } return(Page()); }
public async Task <IActionResult> OnPostAsync(string returnUrl = null) { returnUrl = returnUrl ?? Url.Content("~/"); if (ModelState.IsValid) { var _user = await _userManager.FindByEmailAsync(Input.Email); if (_user == null) { return(RedirectToPage("Register", new { IsFromLogin = true, returnUrl })); } if (!await _userManager.IsEmailConfirmedAsync(_user)) { var code = await _userManager.GenerateEmailConfirmationTokenAsync(_user); code = WebEncoders.Base64UrlEncode(Encoding.UTF8.GetBytes(code)); var callbackUrl = Url.Page( "/Account/ConfirmEmail", pageHandler: null, values: new { area = "Identity", userId = _user.Id, code = code }, protocol: Request.Scheme); await ToupiaoEmailSender.SendEmailAnync( _configuration, Input.Email, _localizer["确认你的电子邮件"], _localizer["请确认您的帐户"] + " <a href='" + HtmlEncoder.Default.Encode(callbackUrl) + "'>" + _localizer["点击这里"] + "</a>"); ModelState.AddModelError(string.Empty, _localizer["邮件已发送!请确认后可以登录"]); return(Page()); } // 通过邮箱来获取用户名 var _UserName = _userManager.FindByEmailAsync(Input.Email) .GetAwaiter().GetResult().UserName; // This doesn't count login failures towards account lockout // To enable password failures to trigger account lockout, set lockoutOnFailure: true var result = await _signInManager.PasswordSignInAsync( _UserName, Input.Password, Input.RememberMe, lockoutOnFailure : false); // 登录成功 if (result.Succeeded) { _logger.LogInformation("User logged in."); if (_context.Users.Count() == 1) { // 第一个用户为管理员 if (!await _context.Roles.AnyAsync( p => p.Name == "ADMIN")) { var role = new IdentityRole { Name = "ADMIN", NormalizedName = "ADMIN" }; await _roleManager.CreateAsync(role); await _context.SaveChangesAsync(); } if (!User.IsInRole("ADMIN")) { await _userManager.AddToRolesAsync( _user, new[] { "ADMIN" }); await _context.SaveChangesAsync(); _logger.LogInformation( $"User: {_user.Email} is ADMIN now"); } } if (User.IsInRole("ADMIN")) { Response.Cookies.Append( key: "IsAdmin", value: "1", options: new CookieOptions() { Expires = DateTime.Now.AddYears(1) }); } return(LocalRedirect(returnUrl)); } if (result.RequiresTwoFactor) { return(RedirectToPage("./LoginWith2fa", new { ReturnUrl = returnUrl, RememberMe = Input.RememberMe })); } if (result.IsLockedOut) { _logger.LogWarning("用户帐户被锁定。"); return(RedirectToPage("./Lockout")); } else { ModelState.AddModelError(string.Empty, "账号或者密码错误!"); return(Page()); } } // If we got this far, something failed, redisplay form return(Page()); }
public async Task <IActionResult> OnPostAsync(string returnUrl = null) { returnUrl = 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", pageHandler: null, values: new { area = "Identity", userId = user.Id, code = code }, protocol: Request.Scheme); await ToupiaoEmailSender.SendEmailAnync( _configuration, Input.Email, _localizer["Confirm your email"], _localizer[$"Please confirm your account by"] + $"<a href='{HtmlEncoder.Default.Encode(callbackUrl)}'>" + _localizer["clicking here"] + "</a>."); if (_userManager.Options.SignIn.RequireConfirmedAccount) { return(RedirectToPage("RegisterConfirmation", new { email = Input.Email })); } else { await _signInManager.SignInAsync(user, isPersistent : 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()); }