Example #1
0
        public async Task <IActionResult> LoginViaPass(string username, string password)
        {
            if (!ValidateHelper.IsAllNotEmpty(username, password))
            {
                return(GetJsonRes("用户名密码不能为空"));
            }
            var res = await this._login.ValidUserPassword(username, password);

            res.ThrowIfNotSuccess();

            var user = res.Data;

            var identity = new IdentityServer4.IdentityServerUser(user.UID)
            {
                DisplayName = user.UserName
            };

            identity.AdditionalClaims = new Claim[]
            {
                new Claim(AuthExtensions.claims_account_type_key, "user")
            };

            await this.HttpContext.SignInAsync(identity);

            return(GetJson(new _().SetSuccessData(string.Empty)));
        }
Example #2
0
        public async Task <IActionResult> Callback()
        {
            var external_cookie_login = ConfigSet.Identity.ExternalLoginScheme;

            // read external identity from the temporary cookie
            var res = await HttpContext.AuthenticateAsync(external_cookie_login);

            if (res?.Succeeded != true || res.Principal == null)
            {
                throw new Exception("External authentication error");
            }
            var provider  = res.Properties.Items["scheme"];
            var principal = res.Principal;

            var openid =
                principal.FindFirst(JwtClaimTypes.Subject)?.Value ??
                principal.FindFirst(ClaimTypes.NameIdentifier)?.Value;

            if (ValidateHelper.IsEmpty(openid))
            {
                return(Content("未知openid"));
            }

            var map = await this._login.FindExternalLoginByOpenID(provider, openid);

            if (map == null)
            {
                return(Content("此外部账号未关联任何用户"));
            }

            var user = await this._login.GetUserByUID(map.UserID);

            if (user == null)
            {
                return(Content("用户不存在或者被禁用"));
            }

            var identity = new IdentityServer4.IdentityServerUser(user.Id)
            {
                DisplayName = user.UserName
            };

            await this.HttpContext.SignInAsync(identity);

            // delete temporary cookie used during external authentication
            await HttpContext.SignOutAsync(external_cookie_login);

            // retrieve return URL
            var returnUrl = res.Properties.Items["returnUrl"] ?? "~/";

            return(Redirect(returnUrl));
        }