public async Task <IActionResult> CustomerLogin(CustomerLoginViewModel model, string returnUrl = null) { ViewData["ReturnUrl"] = returnUrl; if (ModelState.IsValid) { string phone; if (!Utils.NormalizePhoneNumber(model.Phone, out phone)) { ModelState.AddModelError("", "Номер телефона указан не верно"); } else { Func <Customer, bool> findCustomer = (c) => { if (c.Phones.Any(x => !string.IsNullOrEmpty(x.Number))) { foreach (var p in c.Phones) { string normilized; if (Utils.NormalizePhoneNumber(p.Number, out normilized) && phone.Equals(normilized)) { return(true); } } } return(false); }; Customer dbCustomer = _context.Clients.Include(x => x.Phones).SingleOrDefault(x => findCustomer(x)); if (dbCustomer == null) { ModelState.AddModelError("", "Клиент с таким номером телефона не найден"); } else { var verifyCode = HttpContext.Session.GetString("CustomerSmsCode"); var verifyCodeTimeStampString = HttpContext.Session.GetString("CustomerSmsTimestamp"); DateTime verifyCodeTimeStamp; if (!DateTime.TryParse(verifyCodeTimeStampString, out verifyCodeTimeStamp) || verifyCodeTimeStamp.AddMinutes(5) <= DateTime.Now) { ModelState.AddModelError("", "Истек срок ожидания кода из смс, запросите новый код"); } else { if (verifyCode.Equals(model.SmsCode)) { var customerUser = CustomerUser.CreateInstance(); customerUser.CustomerId = dbCustomer.Id; customerUser.LoginTime = DateTime.Now; customerUser.Phone = model.Phone; customerUser.CustomerName = dbCustomer.MidleName + " " + dbCustomer.LastName; base.CustomerUser = customerUser; return(RedirectToLocal(returnUrl)); } else { ModelState.AddModelError("", "Код из смс введен не верно или истек срок ожидания, запросите новый код"); } } } } } return(View(model)); }