public async Task <ActionResult> ExternalLoginCallback(string provider)
        {
            var loginInfo = await SignInManager.AuthenticationManager.GetExternalLoginInfoAsync();

            var signInStatus = await SignInManager.ExternalSignInAsync(loginInfo, false);

            switch (signInStatus)
            {
            case SignInStatus.Success:
                return(RedirectToAction("Index", "Home"));

            default:
                var user = await UserManager.FindByEmailAsync(loginInfo.ExternalIdentity.FindFirstValue(ClaimTypes.Email));       // checking here user has local account in the ASPNetUsers Table

                //creating new user in ASPNETUsers table
                if (user == null)
                {
                    user = new ExtendingUser
                    {
                        UserName         = loginInfo.ExternalIdentity.FindFirstValue(ClaimTypes.GivenName),
                        Email            = loginInfo.ExternalIdentity.FindFirstValue(ClaimTypes.Email),
                        TwoFactorEnabled = true
                    };
                    await UserManager.CreateAsync(user);                       //This will create new record in AspnetUsers table

                    await UserManager.AddLoginAsync(user.Id, loginInfo.Login); // This will create new Record in AspnetUsersLogin Table for external Authentication.
                }
                else if (user.Email != null)
                {
                    await UserManager.AddLoginAsync(user.Id, loginInfo.Login);     // This will create new Record in AspnetUsersLogin Table for external Authentication.
                }

                return(RedirectToAction("Index", "Home"));
            }
        }
        public async Task <ActionResult> Register(ExtendingUser register)
        {
            var idenetityUser = await UserManager.FindByNameAsync(register.Email);

            if (idenetityUser != null)
            {
                return(RedirectToAction("Index", "Home"));
            }
            //var identityResult = await UserManager.CreateAsync(new IdentityUser(register.UserName), register.Password);
            //if (identityResult.Succeeded)
            //{
            //    return RedirectToAction("Index", "Home");
            //}
            //ModelState.AddModelError("", identityResult.Errors.FirstOrDefault());
            //return View(register);
            else
            {
                var user = new ExtendingUser
                {
                    UserName    = register.Email,
                    LastName    = register.LastName,
                    PhoneNumber = register.PhoneNumber,
                    DOB         = register.DOB,
                    Email       = register.Email,
                    FirstName   = register.FirstName,
                    Country     = register.Country
                };
                user.Addresses.Add(new Address {
                    AddressLine = register.AddressesLine, Country = register.Country, UserId = user.Id
                });
                var identityResult = await UserManager.CreateAsync(user, register.PasswordHash);//it will store record in aspnetUsers table

                if (identityResult.Succeeded)
                {
                    var token = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id);

                    var confirmUrl = Url.Action("ConfirmEmail", "Account", new { userid = user.Id, token = token }, Request.Url.Scheme);
                    await UserManager.SendEmailAsync(user.Id, "Email Confirmation", $"Use link to confirm Email: {confirmUrl }");

                    return(RedirectToAction("Index", "Home"));
                }
                ModelState.AddModelError("", identityResult.Errors.FirstOrDefault());
            }

            return(View(register));
        }