public async Task <Respuesta> RecoverPasswordAsync(string urlBase, string servicePrefix, string controller, RecuperarPasswordViewModel recuperarPasswordPeticion) { try { var request = JsonConvert.SerializeObject(recuperarPasswordPeticion); var content = new StringContent(request, Encoding.UTF8, "application/json"); var client = new HttpClient { BaseAddress = new Uri(urlBase) }; var url = $"{servicePrefix}{controller}"; var response = await client.PostAsync(url, content); var answer = await response.Content.ReadAsStringAsync(); var obj = JsonConvert.DeserializeObject <Respuesta>(answer); return(obj); } catch (Exception ex) { return(new Respuesta { EsExitoso = false, Mensaje = ex.Message, }); } }
public ActionResult RecuperarPassword(string usuarioid = null, Guid?token = null) { if (User.Identity.IsAuthenticated && usuarioid == null && token == null) { var user = UserManager.FindById(User.Identity.GetUserId()); user.Token = SequentialGuidGenerator.NewSequentialGuid(SequentialGuidType.SequentialAtEnd); user.TokenFechaVencimiento = DateTime.Now.AddDays(5); UserManager.Update(user); var model = new RecuperarPasswordViewModel(); model.Token = user.Token; model.UsuarioId = user.Id; return(View(model)); } else { var model = new RecuperarPasswordViewModel(); model.Token = token.Value; model.UsuarioId = usuarioid; return(View(model)); } }
public ActionResult RecuperarPassword(RecuperarPasswordViewModel model) { var user = UserManager.FindById(model.UsuarioId); if (string.IsNullOrWhiteSpace(model.Password) || string.IsNullOrWhiteSpace(model.ConfirmPassword)) { model.Error = "No ha completado los datos solicitados"; return(View("RecuperarPassword", model)); } if (model.Password != model.ConfirmPassword) { model.Error = "La contraseña y su confirmación no son iguales"; return(View("RecuperarPassword", model)); } if (model.Password.Length < 6) { model.Error = "La contraseña debe tener al menos 6 caracteres"; return(View("RecuperarPassword", model)); } if (!model.Password.Any(c => char.IsLower(c))) { model.Error = "La contraseña debe contener al menos una minúscula"; return(View("RecuperarPassword", model)); } if (!model.Password.Any(c => char.IsUpper(c))) { model.Error = "La contraseña debe contener al menos una mayúscula"; return(View("RecuperarPassword", model)); } if (!model.Password.Any(c => char.IsNumber(c))) { model.Error = "La contraseña debe contener al menos un número"; return(View("RecuperarPassword", model)); } Regex RgxUrl = new Regex("[^a-z0-9]"); if (model.Password.All(Char.IsLetterOrDigit)) { model.Error = "La contraseña debe contener al menos un caracter (ejemplos: '!', '#', '-')"; return(View("RecuperarPassword", model)); } if (user != null) { if (user.Token.Equals(model.Token) && (DateTime.Now <= user.TokenFechaVencimiento)) { try { UserManager.PasswordHasher = new PasswordHasher(); user.PasswordHash = UserManager.PasswordHasher.HashPassword(model.Password); UserManager.Update(user); model.Error = null; ViewBag.Success = true; return(View("RecuperarPassword", model)); } catch (Exception ex) { model.Error = "Ha ocurrido un error"; return(View("RecuperarPassword", model)); } } else { model.Error = "El token no se corresponde con ningun usuario o el mismo ha expirado"; return(View("RecuperarPassword", model)); } } else { model.Error = "El id no se corresponde con ningun usuario"; return(View("RecuperarPassword", model)); } }