public async Task <SignInStatus> SignInWithUserExternalLoginAsync(UserExternalLogin userExternalLogin, bool isPersistentCookie) { SignInStatus signInStatus; using (this.DbContextScopeFactory.CreateReadOnly()) { User user = await this.userRepository.FindByLoginAsync(userExternalLogin.LinkedLogin); if (user == null) { signInStatus = SignInStatus.Failure; } else { bool userIsLockedOut = user.LockoutEnabled && user.LockoutEndDateUtc >= DateTimeOffset.UtcNow; if (userIsLockedOut) { signInStatus = SignInStatus.LockedOut; } else { if (user.TwoFactorEnabled) { signInStatus = await this.SignInWithTwoFactorCookieAsync(user); } else { signInStatus = await this.SignInAsync(user, isPersistentCookie, false); } } } } return(signInStatus); }
public async Task <IActionResult> OnGetCallbackAsync(string returnUrl = null, string remoteError = null) { returnUrl = returnUrl ?? Url.Content("~/"); if (remoteError != null) { ErrorMessage = $"Error from external provider: {remoteError}"; return(RedirectToPage("./Login", new { ReturnUrl = returnUrl })); } var info = await _signInManager.GetExternalLoginInfoAsync(); if (info == null) { ErrorMessage = "Error loading external login information."; return(RedirectToPage("./Login", new { ReturnUrl = returnUrl })); } // Sign in the user with this external login provider if the user already has a login. var result = await _signInManager.ExternalLoginSignInAsync(info.LoginProvider, info.ProviderKey, isPersistent : false, bypassTwoFactor : true); if (result.Succeeded) { _logger.LogInformation("{Name} logged in with {LoginProvider} provider.", info.Principal.Identity.Name, info.LoginProvider); return(LocalRedirect(returnUrl)); } if (result.IsLockedOut) { return(RedirectToPage("./Lockout")); } else { // If the user does not have an account, then ask the user to create an account. ReturnUrl = returnUrl; ProviderDisplayName = info.ProviderDisplayName; if (info.Principal.HasClaim(c => c.Type == ClaimTypes.Email)) { _User = new UserExternalLogin { Email = info.Principal.FindFirstValue(ClaimTypes.Email) }; } return(Page()); } }
private UserExternalLogin GetUserExternalLogin(AuthenticateResult result) { UserExternalLogin userExternalLogin = null; Claim firstClaim = result?.Identity?.FindFirst(IdentityClaimsNameIdentifier); if (firstClaim != null) { string identityName = result.Identity.Name; identityName = identityName?.Replace(" ", string.Empty); string emailAddress = result.Identity.FindFirst(IdentityClaimsEmailAddressIdentifier)?.Value; userExternalLogin = new UserExternalLogin { ExternalIdentity = result.Identity, LinkedLogin = new UserLinkedLogin(firstClaim.Issuer, firstClaim.Value), DefaultUserName = identityName, Email = emailAddress }; } return(userExternalLogin); }
public static UserLoginInfo ToUserLoginInfoCore([NotNull] this UserExternalLogin uel) => new UserLoginInfo(uel.Provider, uel.Key, uel.Key);