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