public async Task <IActionResult> Login( string Username, string Password, string RedirectUrl, [FromServices] JoyOIUC UC) { var authorizeResult = await UC.TrustedAuthorizeAsync(Username, Password); if (authorizeResult.succeeded) { var profileResult = await UC.GetUserProfileAsync(authorizeResult.data.open_id, authorizeResult.data.access_token); User user = await UserManager.FindByNameAsync(Username); if (user == null) { user = new User { Id = authorizeResult.data.open_id, UserName = Username, Email = profileResult.data.email, PhoneNumber = profileResult.data.phone, SiteName = profileResult.data.nickname, Template = "Default", AccessToken = authorizeResult.data.access_token, ExpireTime = authorizeResult.data.expire_time, OpenId = authorizeResult.data.open_id, AvatarUrl = UC.GetAvatarUrl(authorizeResult.data.open_id) }; await UserManager.CreateAsync(user, Password); } if (authorizeResult.data.is_root) { await UserManager.AddToRoleAsync(user, "Root"); } var username = (await UC.GetUsernameAsync(authorizeResult.data.open_id, authorizeResult.data.access_token)).data; var domain = string.Format(Configuration["Host:DomainTemplate"], username); if (!DB.DomainBindings.Any(x => x.Domain == domain)) { DB.DomainBindings.Add(new DomainBinding { Domain = domain, UserId = authorizeResult.data.open_id }); DB.SaveChanges(); } await SignInManager.SignInAsync(user, true); if (!string.IsNullOrWhiteSpace(RedirectUrl)) { return(Redirect(RedirectUrl)); } else { return(RedirectToAction("Index")); } } else { return(Prompt(x => { x.Title = SR["Sign in failed"]; x.Details = authorizeResult.msg; x.StatusCode = authorizeResult.code; })); } }
public async Task <IActionResult> PutSession([FromServices] JoyOIUC UC, CancellationToken token) { var login = JsonConvert.DeserializeObject <Login>(RequestBody); var authorizeResult = await UC.TrustedAuthorizeAsync(login.Username, login.Password); if (authorizeResult.succeeded) { var profileResult = await UC.GetUserProfileAsync(authorizeResult.data.open_id, authorizeResult.data.access_token); User user = await UserManager.FindByNameAsync(login.Username); if (user == null) { user = new User { Id = authorizeResult.data.open_id, UserName = login.Username, Email = profileResult.data.email, PhoneNumber = profileResult.data.phone, AccessToken = authorizeResult.data.access_token, ExpireTime = authorizeResult.data.expire_time, OpenId = authorizeResult.data.open_id, AvatarUrl = UC.GetAvatarUrl(authorizeResult.data.open_id) }; await UserManager.CreateAsync(user, login.Password); } var roles = await UserManager.GetRolesAsync(user); if (authorizeResult.data.is_root) { if (!roles.Any(x => x == "Root")) { await UserManager.AddToRoleAsync(user, "Root"); } } else { if (roles.Any(x => x == "Root")) { await UserManager.RemoveFromRoleAsync(user, "Root"); } } await SignInManager.SignInAsync(user, true); user.LastLoginTime = DateTime.Now; DB.SaveChanges(); var cookie = HttpContext.Response.Headers["Set-Cookie"].ToString(); var expire = DateTime.Parse(CookieExpireRegex.Match(cookie).Value).ToTimeStamp(); return(Result <dynamic>(new { Cookie = cookie .Replace(" httponly", "") .Replace("samesite=lax", "") .Replace("path=/;", ""), Expire = expire })); } else { return(Result(400, authorizeResult.msg)); } }