Beispiel #1
0
        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));
        }