protected override SubmissionExecuteResult Execute(LoginCustomerModel model)
        {
            var      membership = MemberPluginHelper.GetMembership();
            var      valid      = _userManager.Validate(membership, model.Email, model.Password);
            Customer customer   = null;

            if (valid)
            {
                customer = Site.Commerce().Customers.Query().ByEmail(model.Email).FirstOrDefault();
                if (customer == null)
                {
                    valid = false;
                }
            }

            if (!valid)
            {
                throw new InvalidModelStateException(new Dictionary <string, string>
                {
                    { "Email", "Email and/or password are incorrect." }
                });
            }

            HttpContext.Membership().SetAuthCookie(model.Email, model.RememberMe.GetValueOrDefault(false));

            var sessionId = EngineContext.Current.Resolve <IShoppingCartSessionIdProvider>().GetCurrentSessionId(false);

            if (!String.IsNullOrWhiteSpace(sessionId))
            {
                Site.Commerce().ShoppingCarts.MigrateCart(customer.Id, sessionId);
            }

            var returnUrl = ResolveUrl(model.ReturnUrl, ControllerContext);

            return(new SubmissionExecuteResult
            {
                RedirectUrl = returnUrl,
                Data = new LoginCustomerResult
                {
                    CustomerId = customer.Id,
                    Email = model.Email
                }
            });
        }
        protected override SubmissionExecuteResult Execute(RegisterCustomerModel model)
        {
            var membership = MemberPluginHelper.GetMembership();
            var user       = _userManager.Create(membership, model.Email, model.Email, model.Password, true, "en-US", null);

            var customer = new Customer
            {
                Email     = model.Email,
                FirstName = model.FirstName,
                LastName  = model.LastName,
                Gender    = model.Gender
            };

            if (model.CustomFields != null)
            {
                foreach (var each in model.CustomFields)
                {
                    customer.CustomFields.Add(each.Key, each.Value);
                }
            }

            var customerId = Site.Commerce().Customers.Create(customer);

            if (model.SetAuthCookie)
            {
                var auth = new MembershipAuthentication(Site, membership, HttpContext);
                auth.SetAuthCookie(customer.Email, false);

                var sessionId = EngineContext.Current.Resolve <IShoppingCartSessionIdProvider>().GetCurrentSessionId(false);
                if (!String.IsNullOrWhiteSpace(sessionId))
                {
                    Site.Commerce().ShoppingCarts.MigrateCart(customerId, sessionId);
                }
            }

            return(new SubmissionExecuteResult
            {
                RedirectUrl = ResolveUrl(model.ReturnUrl, ControllerContext),
                Data = new RegisterCustomerResult
                {
                    CustomerId = customer.Id
                }
            });
        }