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))); }
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)); }