public async Task <IActionResult> OnPostAsync() { if (!ModelState.IsValid) { return(Page()); } var user = await _userManager.FindByEmailAsync(Input.Email); if (user == null) { // Don't reveal that the user does not exist return(RedirectToPage("./ResetPasswordConfirmation")); } var result = await _userManager.ResetPasswordAsync(user, Input.Code, Input.Password); if (result.Succeeded) { //Add used password and activity var usedPassword = new UsedPassword() { User = user, Password = Input.Password, PlaceCreated = "Reset Password" }; _context.Add(usedPassword); await _context.SaveChangesAsync(); var isNew = _info.IsDeviceNew(user.Id, Input.AuthCookies, Input.Ip); var groupNumber = _info.GetDeviceGroupNumber(user.Id, Input.AuthCookies, Input.Ip); var usedDevice = new UserDevice() { Activity = EnumList.Activity.PasswordChange, User = user, AuthCookies = Input.AuthCookies, DeviceType = Input.DeviceType, OperatingSystem = Input.OperatingSystem, Ip = Input.Ip, New = isNew, GroupNumber = groupNumber }; _context.Add(usedDevice); await _context.SaveChangesAsync(); user.CurrentPassword = Input.Password; _context.Update(user); await _context.SaveChangesAsync(); return(new EmptyResult()); } foreach (var error in result.Errors) { ModelState.AddModelError(string.Empty, error.Description); } return(new NotFoundResult()); }
public async Task <IActionResult> OnPostAsync(string returnUrl = null) { returnUrl = returnUrl ?? Url.Content("~/"); ViewData["emailNameValidation"] = ""; if (_context.Users.ToList().Any(x => string.Equals(x.FirstName.Replace(" ", ""), Input.FirstName.Replace(" ", ""), StringComparison.CurrentCultureIgnoreCase) && string.Equals(x.LastName.Replace(" ", ""), Input.LastName.Replace(" ", ""), StringComparison.CurrentCultureIgnoreCase))) { ViewData["emailNameValidation"] = "nameIsTaken"; return(Page()); } if (_context.Users.ToList().Any(x => string.Equals(x.Email, Input.Email, StringComparison.CurrentCultureIgnoreCase))) { ViewData["emailNameValidation"] = "emailIsTaken"; return(Page()); } if (ModelState.IsValid) { var firstName = UpperFirstChar(Input.FirstName); var lastName = UpperFirstChar(Input.LastName); var middleName = UpperFirstChar(Input.MiddleName); var street = UpperFirstChar(Input.Address); var city = UpperFirstChar(Input.City); var country = UpperFirstChar(Input.Country); var profileUserName = $"{firstName}.{lastName}{Input.Year}"; profileUserName = profileUserName.Replace(" ", ""); var user = new ApplicationUser { UserName = Input.Email.Trim(), Email = Input.Email.Trim(), FirstName = firstName, MiddleName = middleName, LastName = lastName, Language = Input.Language, BirthDate = new DateTime(Input.Year, Input.Month, Input.Day), Gender = Input.Gender, PhoneNumber = Input.PhoneNumber, PhoneCode = Input.PhoneCode, Role = EnumList.Role.Student, ProfileUserName = profileUserName, CurrentPassword = Input.Password, }; var result = await _userManager.CreateAsync(user, Input.Password); if (result.Succeeded) { _logger.LogInformation("User created a new account with password."); var usedPassword = new UsedPassword() { User = user, Password = Input.Password, PlaceCreated = "Register Account" }; _context.Add(usedPassword); await _context.SaveChangesAsync(); var address = new Address() { Street = street, ZipCode = Input.ZipCode, City = city, User = user, UserId = user.Id , Country = Input.Country }; _context.Add(address); await _context.SaveChangesAsync(); var device = new UserDevice() { Activity = EnumList.Activity.AccountRegister, Ip = Input.Ip, OperatingSystem = Input.OperatingSystem, DeviceType = Input.DeviceType, AuthCookies = Input.AuthCookies, User = user, New = true, GroupNumber = 1 }; _context.Add(device); await _context.SaveChangesAsync(); var code = await _userManager.GenerateEmailConfirmationTokenAsync(user); var callbackUrl = Url.Page( "/Account/ConfirmEmail", pageHandler: null, values: new { userId = user.Id, code = code }, protocol: Request.Scheme); await _email.RegisterGreetingEmail(user.Id, callbackUrl); // await _emailSender.SendEmailAsync(Input.Email, "Confirm your email", // $"Please confirm your account by <a href='{HtmlEncoder.Default.Encode(callbackUrl)}'>clicking here</a>."); 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()); }
public async Task <IActionResult> 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 (Input.OldPassword != user.CurrentPassword) { ModelState.AddModelError("wrongOldPassword", "{{$t('message.wrongPassword')}}"); return(Page()); } if (Input.NewPassword != Input.ConfirmPassword) { ModelState.AddModelError("noMatch", "{{$t('message.passwordDoesNotMatch')}}"); } var changePasswordResult = await _userManager.ChangePasswordAsync(user, Input.OldPassword, Input.NewPassword); if (!changePasswordResult.Succeeded) { ModelState.AddModelError("error", "{{$t('message.errorRefresh')}}"); return(Page()); } //Add used password and activity var usedPassword = new UsedPassword() { User = user, Password = Input.NewPassword, PlaceCreated = "Change Password" }; _context.Add(usedPassword); _context.SaveChanges(); var isNew = _info.IsDeviceNew(user.Id, Input.AuthCookies, Input.Ip); var groupNumber = _info.GetDeviceGroupNumber(user.Id, Input.AuthCookies, Input.Ip); var usedDevice = new UserDevice() { Activity = EnumList.Activity.PasswordChange, User = user, AuthCookies = Input.AuthCookies, DeviceType = Input.DeviceType, OperatingSystem = Input.OperatingSystem, Ip = Input.Ip, New = isNew, GroupNumber = groupNumber }; _context.Add(usedDevice); _context.SaveChanges(); user.CurrentPassword = Input.NewPassword; _context.Update(user); _context.SaveChanges(); await _signInManager.RefreshSignInAsync(user); _logger.LogInformation("User changed their password successfully."); StatusMessage = "{{$t('message.passwordChanged')}}"; return(RedirectToPage()); }