Пример #1
0
        private string GetEmailConfirmationLink(RegisterModel model, Guid guid)
        {
            string domain = domainNameService.GetDomainName();
            string link   = $"https://{domain}/SignUp/EmailCheckSuccess?guid={guid.ToString()}&email={model.Email}";

            return(link);
        }
        public IActionResult PasswordResetEnterEmail(string email)
        {
            if (!EmailMessageSender.EmailIsValid(email))
            {
                ModelState.AddModelError("", "Введённый email неверный");
                return(View());
            }

            Account account = context.EmailLoginInfo
                              .Include(info => info.Account)
                              .SingleOrDefault(_acc => _acc.Email == email)?.Account;

            if (account != null)
            {
                //Отправка сообщения

                Guid guid = Guid.NewGuid();

                AccountToResetPassword tmpRecordDb = new AccountToResetPassword()
                {
                    AccountId = account.Id, GuidPasswordSentToEmail = guid
                };

                //TODO Перезаписывать запрос на смену пароля если уже он уже есть
                List <AccountToResetPassword> recordsWithTheSameAccountId = context.AccountsToResetPassword
                                                                            .Where(_tmpRecord => _tmpRecord.AccountId == account.Id)
                                                                            .ToList();

                if (!recordsWithTheSameAccountId.Any())
                {
                    context.AccountsToResetPassword.Add(tmpRecordDb);
                }
                else if (recordsWithTheSameAccountId.Count() == 1)
                {
                    recordsWithTheSameAccountId[0].GuidPasswordSentToEmail = guid;
                }
                else
                {
                    throw new Exception("В базе не должно быть больше одной записи для смены пароля");
                }

                string domain = domainNameService.GetDomainName();
                var    link   = $"https://{domain}/PasswordReset/PasswordResetOnlyNewPass?guid={guid.ToString()}&accountId={account.Id}";


                bool sendIsOk = emailSender.SendPasswordReset(email, account.Name, link);


                if (!sendIsOk)
                {
                    //если email не отправился, то удалить из БД запись о возможности сброса пароля
                    context.AccountsToResetPassword.Remove(tmpRecordDb);
                }
                context.SaveChanges();

                string message = "На вашу почту отправлено письмо. Для того, чтобы сбросить пароль следуйте инструкциям в письме. ";
                return(RedirectToAction("Success", "StaticMessage", new { message }));
            }
            else
            {
                ModelState.AddModelError("", "Аккаунта с таким email не существует.");
            }

            return(View());
        }