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)); }