コード例 #1
0
        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));
            }
        }
コード例 #2
0
        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));
            }
        }