public async Task <IActionResult> ChangePassword([FromBody] ChangePasswordViewModel model) { if (!ModelState.IsValid) { return(StatusCode(400)); } var user = await GetCurrentUserAsync(); if (user != null) { var result = await _userManager.ChangePasswordAsync(user, model.OldPassword, model.NewPassword); if (result.Succeeded) { _logger.LogInformation(3, "User changed their password successfully."); if (user.DatosSeguridad == null) { //El usuario no posería correctamente configurados los datos de seguridad para la clave privada. Creamos uno nuevo. var securityData = SecurityData.CrearNuevo(model.NewPassword); user.DatosSeguridad = securityData.SecurityString; } else { var securityData = new SecurityData(user.DatosSeguridad); securityData.PasswordChange(model.OldPassword, model.NewPassword); user.DatosSeguridad = securityData.SecurityString; } await _userManager.UpdateAsync(user); return(Ok(new { success = true, message = ManageMessageId.ChangePasswordSuccess })); } return(Ok(new Response(false, result.Errors.Select(e => e.Description).Aggregate((current, next) => current + " " + next)))); } return(Ok(new Response(false, ManageMessageId.Error.ToString()))); }