public async Task <ActionResult> OAuth2Callback(string returnUrl = null, string remoteError = null) { if (remoteError != null) { Logger.LogError($"第三方登录错误:{remoteError}"); return(Json(new AjaxResult($"第三方登录错误:{remoteError}", AjaxResultType.UnAuth))); } string url; ExternalLoginInfo info = await _signInManager.GetExternalLoginInfoAsync(); if (info == null) { url = "/#/exception/500"; Logger.LogError("第三方登录返回的用户信息为空"); return(Redirect(url)); } UserLoginInfoEx loginInfo = info.ToUserLoginInfoEx(); var result = await _identityContract.LoginOAuth2(loginInfo); // 登录不成功,将用户信息返回前端,让用户选择绑定现有账号还是创建新账号 if (!result.Succeeded) { string cacheId = (string)result.Data; loginInfo.ProviderKey = cacheId; url = $"/#/passport/oauth-callback?type={loginInfo.LoginProvider}&id={cacheId}&name={loginInfo.ProviderDisplayName?.ToUrlEncode()}&avatar={loginInfo.AvatarUrl?.ToUrlEncode()}"; return(Redirect(url)); } Logger.LogInformation($"用户“{info.Principal.Identity.Name}”通过 {info.ProviderDisplayName} OAuth2登录成功"); string token = await CreateJwtToken((User)result.Data); url = $"/#/passport/oauth-callback?token={token}"; return(Redirect(url)); }