public async Task<ActionResult> ExternalLoginConfirmation(ExternalLoginConfirmationViewModel model, string returnUrl)
        {
            if (User.Identity.IsAuthenticated)
            {
                return RedirectToAction("Index", "Manage");
            }

            if (ModelState.IsValid)
            {
                // Get the information about the user from the external login provider
                var info = await AuthenticationManager.GetExternalLoginInfoAsync();
                if (info == null)
                {
                    return View("ExternalLoginFailure");
                }
                var user = new ApplicationUser { UserName = model.Email, Email = model.Email };
                var result = await UserManager.CreateAsync(user);
                if (result.Succeeded)
                {
                    result = await UserManager.AddLoginAsync(user.Id, info.Login);
                    if (result.Succeeded)
                    {
                        await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false);
                        return RedirectToLocal(returnUrl);
                    }
                }
                AddErrors(result);
            }

            ViewBag.ReturnUrl = returnUrl;
            return View(model);
        }
        public async Task<ActionResult> Register(LoginRegisterViewModel model)
        {
            RegisterViewModel registerModel = model.RegisterViewModel;

            if (!ModelState.IsValid)
            {
                return View("LoginRegister", model);
            }
            else if (string.IsNullOrWhiteSpace(registerModel.RegisterEmail) ||
                        string.IsNullOrWhiteSpace(registerModel.RegisterPassword) ||
                        string.IsNullOrWhiteSpace(registerModel.RegisterName))
            {
                if (string.IsNullOrWhiteSpace(registerModel.RegisterEmail))
                {
                    ModelState.AddModelError("RegisterEmail", "Please, enter email.");
                }

                if (string.IsNullOrWhiteSpace(registerModel.RegisterPassword))
                {
                    ModelState.AddModelError("RegisterPassword", "Please, enter password.");
                }

                if (string.IsNullOrWhiteSpace(registerModel.RegisterName))
                {
                    ModelState.AddModelError("RegisterName", "Please, enter user name.");
                }

                return View("LoginRegister", model);
            }

            var user = new ApplicationUser { UserName = registerModel.RegisterName, Email = registerModel.RegisterEmail };
            var result = await UserManager.CreateAsync(user, registerModel.RegisterPassword);
            if (result.Succeeded)
            {
                await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false);

                ApplicationUser addedUser = UserManager.FindByEmail(user.Email);
                Guid userId = Guid.Parse(addedUser.Id);

                using (ApplicationContext context = new ApplicationContext())
                {
                    UserDetail detail = new UserDetail();
                    detail.UserId = userId;
                    detail.Name = addedUser.UserName;
                    context.Set<UserDetail>().Add(detail);

                    Cart cart = context
                                .Set<Cart>()
                                .Include("CartItems.Product")
                                .Where(x => x.UserId == userId)
                                .FirstOrDefault();

                    if (null == cart)
                    {
                        context.Set<Cart>().Add(new Cart(userId));
                    }

                    context.SaveChanges();
                }

                if (null != Session["Cart"])
                {
                    Cart sessionCart = (Cart)Session["Cart"];

                    UpdateDbCart((cart, context) =>
                    {
                        foreach (CartItem item in sessionCart.CartItems)
                        {
                            CartItem savedItem = cart.CartItems.Where(x => x.Product.Id == item.Product.Id).FirstOrDefault();
                            if (null == savedItem)
                                cart.CartItems.Add(new CartItem(item.Product, item.Quontity));
                            else
                                savedItem.Quontity += item.Quontity;
                        }
                    }, userId);

                    Session["Cart"] = null;
                }

                // For more information on how to enable account confirmation and password reset please visit http://go.microsoft.com/fwlink/?LinkID=320771
                // Send an email with this link
                // string code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id);
                // var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme);
                // await UserManager.SendEmailAsync(user.Id, "Confirm your account", "Please confirm your account by clicking <a href=\"" + callbackUrl + "\">here</a>");

                return RedirectToAction("Index", "Product");
            }
            //    AddErrors(result);
            //}

            //// If we got this far, something failed, redisplay form
            return View("LoginRegister", model);
        }