public async Task <Response> UpdatePasswordByToken([FromBody] TokenPasswordModel model) { _logger.LogInformation($"Обновление пароля по токену для пользователя с email: \"{model.Email}\""); var user = await _signInManager.UserManager.FindByEmailAsync(model.Email); if (user == null) { _logger.LogWarning("Не нашли пользователя по email. Подозрительно."); throw new InvalidRequestDataException("Недействительный токен"); // не будем раскрывать карты } var result = await _signInManager.UserManager.ResetPasswordAsync(user, model.Token, model.Password); if (!result.Succeeded) { throw new InvalidRequestDataException(result.Errors); } // пользователь получил токен по почте, значит почта подтверждена if (!user.EmailConfirmed) { user.EmailConfirmed = true; await _signInManager.UserManager.UpdateAsync(user); } _logger.LogInformation($"Пользователь (Id = {user.Id}, Email = {user.Email}) успешно обновил пароль по токену"); return(new Response()); }
public async Task <IActionResult> TokenPasswordChange([FromBody] TokenPasswordModel model) { if (!ModelState.IsValid) { return(BadRequest(ModelState.Select(e => e.Value).ToList())); } var appUser = await userManager.FindByEmailAsync(model.Email); var result = await userManager.ResetPasswordAsync(appUser, model.Token, model.NewPassword); if (!result.Succeeded) { return(BadRequest()); } await userManager.ResetAccessFailedCountAsync(appUser); await userManager.SetLockoutEndDateAsync(appUser, null); return(Ok()); }