using Microsoft.AspNetCore.Http; using System; using Microsoft.Extensions.DependencyInjection; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Web; using YiSha.Util; using YiSha.Util.Extension; using YiSha.Cache.Factory; namespace YiSha.Web.Code { public class Operator { public static Operator Instance { get { return new Operator(); } } private string LoginProvider = GlobalContext.Configuration.GetSection("SystemConfig:LoginProvider").Value; private string TokenName = "UserToken"; //cookie name or session name public async Task AddCurrent(string token) { switch (LoginProvider) { case "Cookie": new CookieHelper().WriteCookie(TokenName, token); break; case "Session": new SessionHelper().WriteSession(TokenName, token); break; case "WebApi": OperatorInfo user = await new DataRepository().GetUserByToken(token); if (user != null) { CacheFactory.Cache.SetCache(token, user); } break; default: throw new Exception("未找到LoginProvider配置"); } } /// /// Api接口需要传入apiToken /// /// public void RemoveCurrent(string apiToken = "") { switch (LoginProvider) { case "Cookie": new CookieHelper().RemoveCookie(TokenName); break; case "Session": new SessionHelper().RemoveSession(TokenName); break; case "WebApi": CacheFactory.Cache.RemoveCache(apiToken); break; default: throw new Exception("未找到LoginProvider配置"); } } /// /// Api接口需要传入apiToken /// /// /// public async Task Current(string apiToken = "") { IHttpContextAccessor hca = GlobalContext.ServiceProvider?.GetService(); OperatorInfo user = null; string token = string.Empty; switch (LoginProvider) { case "Cookie": if (hca.HttpContext != null) { token = new CookieHelper().GetCookie(TokenName); } break; case "Session": if (hca.HttpContext != null) { token = new SessionHelper().GetSession(TokenName); } break; case "WebApi": token = apiToken; break; } if (string.IsNullOrEmpty(token)) { return user; } token = token.Trim('"'); user = CacheFactory.Cache.GetCache(token); if (user == null) { user = await new DataRepository().GetUserByToken(token); if (user != null) { CacheFactory.Cache.SetCache(token, user); } } return user; } } }