public async Task <IActionResult> ExternalLoginCallback(string returnUrl = null) { var info = await this.GetExternalLoginInfoAsync(); if (info == null) { return(await this.ShowExternalSignInErrorAsync(OAuthSignInError.InvalidRequest)); } if (info.ProviderDisplayName.IsNullOrWhiteSpace()) //微软BUG?没有带出 DisplayName { var schemas = await this.SignInManager.GetExternalAuthenticationSchemesAsync(); var p = schemas.FirstOrDefault(s => s.Name.CaseInsensitiveEquals(info.LoginProvider)); info.ProviderDisplayName = p?.DisplayName; } Microsoft.AspNetCore.Identity.SignInResult result = await ExternalLoginSignInAsync(info); if (result.Succeeded) { return(this.RedirectToLocal(returnUrl)); } if (result.IsLockedOut) { return(await this.ShowExternalSignInErrorAsync(OAuthSignInError.UserLockedOut)); } else if (result.IsNotAllowed) { return(await this.ShowExternalSignInErrorAsync(OAuthSignInError.NotAllowed)); } else { var loginModel = new OAuthSignedInModel { LoginProvider = info.LoginProvider, ProviderDisplayName = info.ProviderDisplayName, ProviderKey = info.ProviderKey, ThirdPartUserName = info.Principal.FindFirst(ClaimTypes.Name)?.Value }; await this.SignInManager.SignOutAsync(); return(await this.ShowBindExternalAccountAsync(loginModel)); } }
/// <summary> /// 表示返回对第三方账号进行绑定的错操的结果。 /// </summary> /// <param name="model"></param> /// <returns></returns> protected abstract Task <IActionResult> ShowBindExternalAccountAsync(OAuthSignedInModel model);