public ActionResult RecoveryPassword(RecoveryPasswordVm model) { try { if (!ModelState.IsValid) { return(View().Error(Error.Default)); } if (!string.Equals(model.NewPassword, model.ConfirmPassword)) { return(View(model).Error(Error.PasswordDoesNotMatch)); } var user = _db.Users.FirstOrDefault(x => x.PasswordRecoveryCode == model.Code); if (user == null) { return(RedirectToAction("Signin").Success(Success.ChangedPassword)); } _db.Entry(user).Property(u => u.Password).CurrentValue = user.EncryptPassword(model.NewPassword); _db.SaveChanges(); return(RedirectToAction("Signin").Success(Success.ChangedPassword)); } catch (Exception e) { return(View().Error(e.Message)); } }
public async Task <ActionResult> RecoveryPassword(RecoveryPasswordVm model) { try { if (!ModelState.IsValid) { return(View(model)); } var repo = new RepositoryBase <User>(_db); var user = repo.GetItemByExpression(x => x.Cpf.Equals(model.UserName), x => x.Contacts); if (user == null) { return(View(model).Success("Um código para redefinição da sua senha foi enviado para o seu email")); } user.GeneratePasswordRecoveryCode(); var query = $"UPDATE [{nameof(Domain.Entities.User)}] SET {nameof(user.PasswordRecoveryCode)}='{user.PasswordRecoveryCode}' WHERE {nameof(user.UserId)}='{user.UserId}'"; await _db.Database.ExecuteSqlCommandAsync(query); var email = user.Contacts.FirstOrDefault(f => f.ContactType == ContactType.Email)?.Description; if (string.IsNullOrWhiteSpace(email)) { return(View(model).Error("Não foi possível enviar um email com o seu código de recuperação, pois não existe nenhum Email para contato")); } var emailManager = new EmailManager(new ArrayList { email }); emailManager.ForgotPassword(user.FullName, $"{Request.Url.Authority}/account/newpassword/{user.PasswordRecoveryCode}"); await emailManager.SendAsync(emailManager.Sender, "Sistema Mr Rondon Turismo"); return(View(model).Success($"Um código para redefinição da sua senha foi enviado para o seu email: '{email}'")); } catch (Exception e) { return(View(model).Error(e.Message)); } }