public async Task <IActionResult> SigninExternalCallback(string returnUrl) { var signinInfo = await _signInService.GetExternalLoginInfoAsync(); if (signinInfo != null) { var signInResult = await _signInService.ExternalLoginSignInAsync(signinInfo.LoginProvider, signinInfo.ProviderKey, isPersistent : false, bypassTwoFactor : true); if (signInResult.Succeeded) { return(LocalRedirect(returnUrl ?? Url.Action("Index", "Home", new { area = "Portal" }))); } else { var email = signinInfo.Principal.FindFirstValue(ClaimTypes.Email); if (!string.IsNullOrWhiteSpace(email)) { var member = await _userService.FindByEmailAsync(email); if (member != null) { var result = await _userService.AddLoginAsync(member, signinInfo); if (result.Succeeded) { await _signInService.SignInAsync(member, isPersistent : false); return(LocalRedirect(returnUrl ?? Url.Action("Index", "Home", new { area = "Portal" }))); } } else { var firstName = signinInfo.Principal.FindFirstValue(ClaimTypes.GivenName); var lastName = signinInfo.Principal.FindFirstValue(ClaimTypes.Surname); var phoneNumber = signinInfo.Principal.FindFirstValue(ClaimTypes.MobilePhone); member = new User { FirstName = firstName, LastName = lastName, Email = email, EmailConfirmed = true, PhoneNumber = phoneNumber, }; await _userService.GenerateUserCodeAsync(member); await _userService.GenerateUserNameAsync(member); await PrepareStoreAsync(member); var result = await _userService.CreateAsync(member, Guid.NewGuid().ToString()); if (result.Succeeded) { result = await _userService.AddToRolesAsync(member, new[] { RoleNames.Seller, RoleNames.Customer }); if (result.Succeeded) { result = await _userService.AddLoginAsync(member, signinInfo); if (result.Succeeded) { await _signInService.SignInAsync(member, isPersistent : false); return(LocalRedirect(returnUrl ?? Url.Action("Index", "Home", new { area = "Portal" }))); } } } } } TempData.AddAlert(AlertMode.Notify, AlertType.Error, "Signin failed, Please try another signin provider."); } } else { TempData.AddAlert(AlertMode.Notify, AlertType.Error, "Signin failed, No external signin information was found."); } return(RedirectToAction(nameof(Signin))); }