/// <summary> /// 根据相关信息,写入用户的操作日志记录 /// </summary> /// <param name="tableName">操作表名称</param> /// <param name="operationType">操作类型</param> /// <param name="note">操作详细表述</param> /// <returns></returns> public bool OnOperationLog(string tableName, string operationType, string note) { try { //虽然实现了这个事件,但是我们还需要判断该表是否在配置表里面,如果不在,则不记录操作日志。 //var identities = _httpContextAccessor.HttpContext.User.Identities; if (HttpContextHelper.HttpContext == null) { return(false); } var identities = HttpContextHelper.HttpContext.User.Identities; var claimsIdentity = identities.First <ClaimsIdentity>(); List <Claim> claimlist = claimsIdentity.Claims as List <Claim>; string userId = claimlist[0].Value; YuebonCacheHelper yuebonCacheHelper = new YuebonCacheHelper(); YuebonCurrentUser CurrentUser = new YuebonCurrentUser(); var user = yuebonCacheHelper.Get("login_user_" + userId).ToJson().ToObject <YuebonCurrentUser>(); if (user != null) { CurrentUser = user; bool insert = operationType == DbLogType.Create.ToString();; //&& settingInfo.InsertLog; bool update = operationType == DbLogType.Update.ToString(); // && settingInfo.UpdateLog; bool delete = operationType == DbLogType.Delete.ToString(); // && settingInfo.DeleteLog; bool deletesoft = operationType == DbLogType.DeleteSoft.ToString(); // && settingInfo.DeleteLog; bool exception = operationType == DbLogType.Exception.ToString(); // && settingInfo.DeleteLog; bool sql = operationType == DbLogType.SQL.ToString(); // && settingInfo.DeleteLog; if (insert || update || delete || deletesoft || exception || sql) { Log info = new Log(); info.ModuleName = tableName; info.Type = operationType; info.Description = note; info.Date = info.CreatorTime = DateTime.Now; info.CreatorUserId = CurrentUser.UserId; info.Account = CurrentUser.Account; info.NickName = CurrentUser.NickName; info.OrganizeId = CurrentUser.OrganizeId; info.IPAddress = CurrentUser.CurrentLoginIP; info.IPAddressName = CurrentUser.IPAddressName; info.Result = true; long lg = _iLogRepository.Insert(info); if (lg > 0) { return(true); } } } }catch (Exception ex) { Log4NetHelper.Error("", ex); return(false); } return(false); }
/// <summary> /// 判断是否为系统管理员或超级管理员 /// </summary> /// <returns>true:系统管理员或超级管理员,false:不是系统管理员或超级管理员</returns> /// <param name="currentUser"></param> /// <returns></returns> public static bool IsAdmin(YuebonCurrentUser currentUser) { bool blnIsAdmin = false; if (currentUser != null) { if (currentUser.Account == "admin" || currentUser.Role.Contains("administrators", StringComparison.Ordinal)) { return(true); } } return(blnIsAdmin); }
/// <summary> /// 根据相关信息,写入用户的操作日志记录 /// 主要用于写操作模块日志 /// </summary> /// <param name="module">操作模块名称</param> /// <param name="operationType">操作类型</param> /// <param name="note">操作详细表述</param> /// <param name="currentUser">操作用户</param> /// <returns></returns> public bool OnOperationLog(string module, string operationType, string note, YuebonCurrentUser currentUser) { //虽然实现了这个事件,但是我们还需要判断该表是否在配置表里面,如果不在,则不记录操作日志。 //OperationLogSettingInfo settingInfo = BLLFactory<OperationLogSetting>.Instance.FindByTableName(tableName, trans); if (currentUser != null) { bool login = operationType == DbLogType.Login.ToString(); bool visit = operationType == DbLogType.Visit.ToString(); bool exit = operationType == DbLogType.Exit.ToString(); bool other = operationType == DbLogType.Other.ToString(); bool insert = operationType == DbLogType.Create.ToString(); bool update = operationType == DbLogType.Update.ToString(); bool delete = operationType == DbLogType.Delete.ToString(); bool deletesoft = operationType == DbLogType.DeleteSoft.ToString(); bool exception = operationType == DbLogType.Exception.ToString(); if (login || visit || exit || other || insert || update || delete || deletesoft || exception) { Log info = new Log(); info.ModuleName = module; info.Type = operationType; info.Description = note; info.Date = info.CreatorTime = DateTime.Now; info.CreatorUserId = currentUser.UserId; info.Account = currentUser.Account; info.NickName = currentUser.NickName; info.OrganizeId = currentUser.OrganizeId; info.IPAddress = currentUser.CurrentLoginIP; info.IPAddressName = IpAddressUtil.GetCityByIp(currentUser.CurrentLoginIP); info.Result = true; long lg = _iLogRepository.Insert(info); if (lg > 0) { return(true); } } } return(false); }
public async Task <IActionResult> GetCheckUser(string username, string password, string vcode, string vkey, string appId, string systemCode) { CommonResult result = new CommonResult(); RemoteIpParser remoteIpParser = new RemoteIpParser(); string strIp = remoteIpParser.GetClientIp(HttpContext).MapToIPv4().ToString(); YuebonCacheHelper yuebonCacheHelper = new YuebonCacheHelper(); var vCode = yuebonCacheHelper.Get("ValidateCode" + vkey); string code = vCode != null?vCode.ToString() : "11"; if (vcode.ToUpper() != code) { result.ErrMsg = "验证码错误"; return(ToJsonContent(result)); } Log logEntity = new Log(); bool blIp = _filterIPService.ValidateIP(strIp); if (blIp) { result.ErrMsg = strIp + "该IP已被管理员禁止登录!"; } else { if (string.IsNullOrEmpty(username)) { result.ErrMsg = "用户名不能为空!"; } else if (string.IsNullOrEmpty(password)) { result.ErrMsg = "密码不能为空!"; } if (string.IsNullOrEmpty(systemCode)) { result.ErrMsg = ErrCode.err40006; } else { string strHost = Request.Host.ToString(); APP app = _appService.GetAPP(appId); if (app == null) { result.ErrCode = "40001"; result.ErrMsg = ErrCode.err40001; } else { if (!app.RequestUrl.Contains(strHost, StringComparison.Ordinal) && !strHost.Contains("localhost", StringComparison.Ordinal)) { result.ErrCode = "40002"; result.ErrMsg = ErrCode.err40002 + ",你当前请求主机:" + strHost; } else { SystemType systemType = _systemTypeService.GetByCode(systemCode); if (systemType == null) { result.ErrMsg = ErrCode.err40006; } else { Tuple <User, string> userLogin = await this._userService.Validate(username, password); if (userLogin != null) { string ipAddressName = IpAddressUtil.GetCityByIp(strIp); if (userLogin.Item1 != null) { result.Success = true; User user = userLogin.Item1; JwtOption jwtModel = App.GetService <JwtOption>(); TokenProvider tokenProvider = new TokenProvider(jwtModel); TokenResult tokenResult = tokenProvider.LoginToken(user, appId); YuebonCurrentUser currentSession = new YuebonCurrentUser { UserId = user.Id, Name = user.RealName, AccessToken = tokenResult.AccessToken, AppKey = appId, CreateTime = DateTime.Now, Role = _roleService.GetRoleEnCode(user.RoleId), ActiveSystemId = systemType.Id, CurrentLoginIP = strIp, IPAddressName = ipAddressName }; TimeSpan expiresSliding = DateTime.Now.AddMinutes(120) - DateTime.Now; yuebonCacheHelper.Add("login_user_" + user.Id, currentSession, expiresSliding, true); List <AllowCacheApp> list = yuebonCacheHelper.Get("AllowAppId").ToJson().ToList <AllowCacheApp>(); if (list.Count == 0) { IEnumerable <APP> appList = _appService.GetAllByIsNotDeleteAndEnabledMark(); yuebonCacheHelper.Add("AllowAppId", appList); } CurrentUser = currentSession; result.ResData = currentSession; result.ErrCode = ErrCode.successCode; result.Success = true; logEntity.Account = user.Account; logEntity.NickName = user.NickName; logEntity.Date = logEntity.CreatorTime = DateTime.Now; logEntity.IPAddress = CurrentUser.CurrentLoginIP; logEntity.IPAddressName = CurrentUser.IPAddressName; logEntity.Result = true; logEntity.ModuleName = "登录"; logEntity.Description = "登录成功"; logEntity.Type = "Login"; _logService.Insert(logEntity); } else { result.ErrCode = ErrCode.failCode; result.ErrMsg = userLogin.Item2; logEntity.Account = username; logEntity.Date = logEntity.CreatorTime = DateTime.Now; logEntity.IPAddress = strIp; logEntity.IPAddressName = ipAddressName; logEntity.Result = false; logEntity.ModuleName = "登录"; logEntity.Type = "Login"; logEntity.Description = "登录失败," + userLogin.Item2; _logService.Insert(logEntity); } } } } } } } yuebonCacheHelper.Remove("LoginValidateCode"); return(ToJsonContent(result, true)); }
public IActionResult SysConnect(string openmf, string appId, string systemCode) { CommonResult result = new CommonResult(); RemoteIpParser remoteIpParser = new RemoteIpParser(); string strIp = remoteIpParser.GetClientIp(HttpContext).MapToIPv4().ToString(); if (string.IsNullOrEmpty(openmf)) { result.ErrMsg = "切换参数错误!"; } bool blIp = _filterIPService.ValidateIP(strIp); if (blIp) { result.ErrMsg = strIp + "该IP已被管理员禁止登录!"; } else { string ipAddressName = IpAddressUtil.GetCityByIp(strIp); if (string.IsNullOrEmpty(systemCode)) { result.ErrMsg = ErrCode.err40006; } else { string strHost = Request.Host.ToString(); APP app = _appService.GetAPP(appId); if (app == null) { result.ErrCode = "40001"; result.ErrMsg = ErrCode.err40001; } else { if (!app.RequestUrl.Contains(strHost, StringComparison.Ordinal) && !strHost.Contains("localhost", StringComparison.Ordinal)) { result.ErrCode = "40002"; result.ErrMsg = ErrCode.err40002 + ",你当前请求主机:" + strHost; } else { SystemType systemType = _systemTypeService.GetByCode(systemCode); if (systemType == null) { result.ErrMsg = ErrCode.err40006; } else { YuebonCacheHelper yuebonCacheHelper = new YuebonCacheHelper(); object cacheOpenmf = yuebonCacheHelper.Get("openmf" + openmf); yuebonCacheHelper.Remove("openmf" + openmf); if (cacheOpenmf == null) { result.ErrCode = "40007"; result.ErrMsg = ErrCode.err40007; } else { User user = _userService.Get(cacheOpenmf.ToString()); if (user != null) { result.Success = true; JwtOption jwtModel = App.GetService <JwtOption>(); TokenProvider tokenProvider = new TokenProvider(jwtModel); TokenResult tokenResult = tokenProvider.LoginToken(user, appId); YuebonCurrentUser currentSession = new YuebonCurrentUser { UserId = user.Id, Name = user.RealName, AccessToken = tokenResult.AccessToken, AppKey = appId, CreateTime = DateTime.Now, Role = _roleService.GetRoleEnCode(user.RoleId), ActiveSystemId = systemType.Id, CurrentLoginIP = strIp, IPAddressName = ipAddressName, ActiveSystemUrl = systemType.Url }; TimeSpan expiresSliding = DateTime.Now.AddMinutes(120) - DateTime.Now; yuebonCacheHelper.Add("login_user_" + user.Id, currentSession, expiresSliding, true); CurrentUser = currentSession; result.ResData = currentSession; result.ErrCode = ErrCode.successCode; result.Success = true; } else { result.ErrCode = ErrCode.failCode; } } } } } } } return(ToJsonContent(result)); }
public IActionResult GetUserInfo() { CommonResult result = new CommonResult(); User user = _userService.Get(CurrentUser.UserId); YuebonCacheHelper yuebonCacheHelper = new YuebonCacheHelper(); SystemType systemType = _systemTypeService.Get(CurrentUser.ActiveSystemId); YuebonCurrentUser currentSession = new YuebonCurrentUser { UserId = user.Id, Account = user.Account, Name = user.RealName, NickName = user.NickName, AccessToken = CurrentUser.AccessToken, AppKey = CurrentUser.AppKey, CreateTime = DateTime.Now, HeadIcon = user.HeadIcon, Gender = user.Gender, ReferralUserId = user.ReferralUserId, MemberGradeId = user.MemberGradeId, Role = _roleService.GetRoleEnCode(user.RoleId), MobilePhone = user.MobilePhone, OrganizeId = user.OrganizeId, DeptId = user.DepartmentId, CurrentLoginIP = CurrentUser.CurrentLoginIP, IPAddressName = CurrentUser.IPAddressName, TenantId = "" }; CurrentUser = currentSession; CurrentUser.ActiveSystemId = systemType.Id; CurrentUser.ActiveSystem = systemType.FullName; CurrentUser.ActiveSystemUrl = systemType.Url; List <MenuOutputDto> listFunction = new List <MenuOutputDto>(); MenuApp menuApp = new MenuApp(); if (Permission.IsAdmin(CurrentUser)) { CurrentUser.SubSystemList = _systemTypeService.GetAllByIsNotDeleteAndEnabledMark().MapTo <SystemTypeOutputDto>(); //取得用户可使用的授权功能信息,并存储在缓存中 listFunction = menuApp.GetFunctionsBySystem(CurrentUser.ActiveSystemId); CurrentUser.MenusRouter = menuApp.GetVueRouter("", systemType.EnCode); } else { CurrentUser.SubSystemList = _systemTypeService.GetSubSystemList(user.RoleId); //取得用户可使用的授权功能信息,并存储在缓存中 listFunction = menuApp.GetFunctionsByUser(user.Id, CurrentUser.ActiveSystemId); CurrentUser.MenusRouter = menuApp.GetVueRouter(user.RoleId, systemType.EnCode); } UserLogOn userLogOn = _userLogOnService.GetByUserId(CurrentUser.UserId); CurrentUser.UserTheme = userLogOn.Theme == null ? "default" : userLogOn.Theme; TimeSpan expiresSliding = DateTime.Now.AddMinutes(120) - DateTime.Now; yuebonCacheHelper.Add("User_Function_" + user.Id, listFunction, expiresSliding, true); List <string> listModules = new List <string>(); foreach (MenuOutputDto item in listFunction) { listModules.Add(item.EnCode); } CurrentUser.Modules = listModules; yuebonCacheHelper.Add("login_user_" + user.Id, CurrentUser, expiresSliding, true); //该用户的数据权限 List <String> roleDateList = _roleDataService.GetListDeptByRole(user.RoleId); yuebonCacheHelper.Add("User_RoleData_" + user.Id, roleDateList, expiresSliding, true); result.ResData = CurrentUser; result.ErrCode = ErrCode.successCode; result.Success = true; return(ToJsonContent(result, true)); }
/// <summary> /// 重写基类在Action执行之前的事情 /// 根据token获得当前用户,允许匿名的不需要获取用户 /// </summary> /// <param name="context">重写方法的参数</param> public override void OnActionExecuting(ActionExecutingContext context) { try { var controllerActionDescriptor = context.ActionDescriptor as ControllerActionDescriptor; //匿名访问,不需要token认证、签名和登录 var allowanyone = controllerActionDescriptor.MethodInfo.GetCustomAttribute(typeof(AllowAnonymousAttribute), true); if (allowanyone != null) { return; } CommonResult result = new CommonResult(); //需要token认证 string authHeader = context.HttpContext.Request.Headers["Authorization"];//Header中的token if (string.IsNullOrEmpty(authHeader)) { result.ErrCode = "40004"; result.ErrMsg = ErrCode.err40004; context.Result = ToJsonContent(result); return; } else { string token = string.Empty; if (authHeader != null && authHeader.StartsWith("Bearer ", StringComparison.Ordinal)) { token = authHeader.Substring(7); } TokenProvider tokenProvider = new TokenProvider(); result = tokenProvider.ValidateToken(token); //token验证失败 if (!result.Success) { context.Result = ToJsonContent(result); } else { #region 签名验证 bool boolSign = context.HttpContext.Request.Headers["sign"].SingleOrDefault().ToBool(true); var isSign = controllerActionDescriptor.MethodInfo.GetCustomAttribute(typeof(NoSignRequiredAttribute), true); //需要签名验证 if (isSign == null && boolSign) { CommonResult resultSign = SignHelper.CheckSign(context.HttpContext); if (!resultSign.Success) { context.Result = ToJsonContent(resultSign); return; } } #endregion #region 是否需要验证用户登录以及相关的功能权限 //是否需要用户登录 var isDefined = controllerActionDescriptor.MethodInfo.GetCustomAttribute(typeof(NoPermissionRequiredAttribute)); //不需要登录 if (isDefined != null) { return; } //需要登录和验证功能权限 if (result.ResData != null) { List <Claim> claimlist = result.ResData as List <Claim>; string userId = claimlist[3].Value; var claims = new[] { new Claim(YuebonClaimTypes.UserId, userId), new Claim(YuebonClaimTypes.UserName, claimlist[2].Value), new Claim(YuebonClaimTypes.Role, claimlist[4].Value) }; var identity = new ClaimsIdentity(claims); var principal = new ClaimsPrincipal(identity); context.HttpContext.User = principal; YuebonCacheHelper yuebonCacheHelper = new YuebonCacheHelper(); var user = yuebonCacheHelper.Get <YuebonCurrentUser>("login_user_" + userId); if (user != null) { CurrentUser = user; } bool isAdmin = Permission.IsAdmin(user); if (!isAdmin) { var authorizeAttributes = controllerActionDescriptor.MethodInfo.GetCustomAttributes(typeof(YuebonAuthorizeAttribute), true).OfType <YuebonAuthorizeAttribute>(); if (authorizeAttributes.FirstOrDefault() != null) { string function = authorizeAttributes.First().Function; if (!string.IsNullOrEmpty(function)) { string functionCode = controllerActionDescriptor.ControllerName + "/" + function; bool bl = Permission.HasFunction(functionCode, userId); if (!bl) { result.ErrCode = "40006"; result.ErrMsg = ErrCode.err40006; context.Result = ToJsonContent(result); } } } } return; } else { result.ErrCode = "40008"; result.ErrMsg = ErrCode.err40008; context.Result = ToJsonContent(result); } #endregion } return; } } catch (Exception ex) { Log4NetHelper.Error("", ex); } }
/// <summary> /// 授权验证 /// </summary> /// <param name="context"></param> public void OnAuthorization(AuthorizationFilterContext context) { var controllerActionDescriptor = context.ActionDescriptor as ControllerActionDescriptor; //匿名访问,不需要token认证、签名和登录 var allowanyone = controllerActionDescriptor.MethodInfo.GetCustomAttribute(typeof(AllowAnonymousAttribute), true); if (allowanyone != null) { return; } CommonResult result = new CommonResult(); JsonSerializerOptions options = new JsonSerializerOptions() { WriteIndented = true, //格式化json字符串 AllowTrailingCommas = true, //可以结尾有逗号 //IgnoreNullValues = true, //可以有空值,转换json去除空值属性 IgnoreReadOnlyProperties = true, //忽略只读属性 PropertyNameCaseInsensitive = true, //忽略大小写 //PropertyNamingPolicy = JsonNamingPolicy.CamelCase //命名方式是默认还是CamelCase Encoder = JavaScriptEncoder.Create(UnicodeRanges.All) }; options.Converters.Add(new DateTimeJsonConverter()); //需要token认证 string authHeader = context.HttpContext.Request.Headers["Authorization"];//Header中的token if (string.IsNullOrEmpty(authHeader)) { result.ErrCode = "40004"; result.ErrMsg = ErrCode.err40004; context.Result = new JsonResult(result, options); return; } else { string token = string.Empty; if (authHeader != null) { token = authHeader.Substring(7); } TokenProvider tokenProvider = new TokenProvider(); result = tokenProvider.ValidateToken(token); //token验证失败 if (!result.Success) { context.Result = new JsonResult(result, options); } else { #region 签名验证 bool boolSign = context.HttpContext.Request.Headers["sign"].SingleOrDefault().ToBool(true); var isSign = controllerActionDescriptor.MethodInfo.GetCustomAttribute(typeof(NoSignRequiredAttribute), true); //需要签名验证 if (isSign == null && boolSign) { CommonResult resultSign = SignHelper.CheckSign(context.HttpContext); if (!resultSign.Success) { context.Result = new JsonResult(resultSign, options); return; } } #endregion #region 是否需要验证用户登录以及相关的功能权限 //是否需要用户登录 var isDefined = controllerActionDescriptor.MethodInfo.GetCustomAttribute(typeof(NoPermissionRequiredAttribute)); //不需要登录 if (isDefined != null) { return; } //需要登录和验证功能权限 if (result.ResData != null) { List <Claim> claimlist = result.ResData as List <Claim>; string userId = claimlist[3].Value; YuebonCurrentUser user = new YuebonCurrentUser { UserId = userId, Account = claimlist[2].Value, Role = claimlist[4].Value }; var claims = new[] { new Claim(YuebonClaimTypes.UserId, userId), new Claim(YuebonClaimTypes.UserName, claimlist[2].Value), new Claim(YuebonClaimTypes.Role, claimlist[4].Value) }; var identity = new ClaimsIdentity(claims); var principal = new ClaimsPrincipal(identity); context.HttpContext.User = principal; bool isAdmin = Permission.IsAdmin(user); if (!isAdmin) { var authorizeAttributes = controllerActionDescriptor.MethodInfo.GetCustomAttributes(typeof(YuebonAuthorizeAttribute), true).OfType <YuebonAuthorizeAttribute>(); if (authorizeAttributes.FirstOrDefault() != null) { string function = authorizeAttributes.First().Function; if (!string.IsNullOrEmpty(function)) { string functionCode = controllerActionDescriptor.ControllerName + "/" + function; bool bl = Permission.HasFunction(functionCode, userId); if (!bl) { result.ErrCode = "40006"; result.ErrMsg = ErrCode.err40006; context.Result = new JsonResult(result, options); } } } } return; } else { result.ErrCode = "40008"; result.ErrMsg = ErrCode.err40008; context.Result = new JsonResult(result, options); } #endregion } return; } }
public IActionResult LoginByOpenId(string openId) { CommonResult result = new CommonResult(); try { YuebonCacheHelper yuebonCacheHelper = new YuebonCacheHelper(); User user = userService.GetUserByOpenId("yuebon.openid.wxapplet", openId); if (user == null) { UserInputDto userInput = new UserInputDto(); userInput.OpenId = openId; userInput.OpenIdType = "yuebon.openid.wxapplet"; userInput.NickName = "游客"; result.Success = userService.CreateUserByWxOpenId(userInput); } string userId = string.Empty; if (result.ResData != null) { userId = result.ResData.ToString(); } if (user == null) { user = userService.GetUserByOpenId("yuebon.openid.wxapplet", openId); } var currentSession = (YuebonCurrentUser)yuebonCacheHelper.Get("login_user_" + user.Id); if (currentSession == null || string.IsNullOrWhiteSpace(currentSession.AccessToken)) { JwtOption jwtModel = App.GetService <JwtOption>(); TokenProvider tokenProvider = new TokenProvider(jwtModel); TokenResult tokenResult = tokenProvider.LoginToken(user, "wxapplet"); currentSession = new YuebonCurrentUser { UserId = user.Id, Account = user.Account, Name = user.RealName, NickName = user.NickName, AccessToken = tokenResult.AccessToken, AppKey = "wxapplet", CreateTime = DateTime.Now, HeadIcon = user.HeadIcon, Gender = user.Gender, ReferralUserId = user.ReferralUserId, MemberGradeId = user.MemberGradeId, Role = roleService.GetRoleEnCode(user.RoleId), MobilePhone = user.MobilePhone }; TimeSpan expiresSliding = DateTime.Now.AddMinutes(120) - DateTime.Now; yuebonCacheHelper.Add("login_user_" + user.Id, currentSession, expiresSliding, true); } CurrentUser = currentSession; result.ErrCode = ErrCode.successCode; result.Success = true; result.ResData = currentSession; //new AuthorizeApp().GetAccessedControls(user.Account); } catch (Exception ex) { Log4NetHelper.Error("微信登录异常 LoginByOpenId", ex); result.ErrMsg = "微信登录异常:" + ex.Message; result.ErrCode = ErrCode.successCode; } return(ToJsonContent(result)); }
public IActionResult QuikLogin(WxUserInfo info) { CommonResult result = new CommonResult(); try { if (info != null) { DecodedUserInfo decodedUserInfo = EncryptHelper.DecodeUserInfoBySessionId(info.SessionId, info.EncryptedData, info.Iv); UserInputDto userInput = new UserInputDto(); userInput.NickName = decodedUserInfo.nickName; userInput.HeadIcon = decodedUserInfo.avatarUrl; userInput.Gender = decodedUserInfo.gender; userInput.Country = decodedUserInfo.country; userInput.Province = decodedUserInfo.province; userInput.City = decodedUserInfo.city; userInput.language = info.language; userInput.OpenId = decodedUserInfo.openId; userInput.OpenIdType = "yuebon.openid.wxapplet"; userInput.ReferralUserId = info.ReferralUserId; userInput.UnionId = decodedUserInfo.unionId; User user = userService.GetUserByOpenId(userInput.OpenIdType, decodedUserInfo.openId); if (user == null) { result.Success = userService.CreateUserByWxOpenId(userInput); } else { result.Success = userService.UpdateUserByOpenId(userInput); } user = userService.GetUserByOpenId(info.openIdType, info.openId); if (user != null) { JwtOption jwtModel = App.GetService <JwtOption>(); TokenProvider tokenProvider = new TokenProvider(jwtModel); TokenResult tokenResult = tokenProvider.LoginToken(user, "wxapplet"); var currentSession = new YuebonCurrentUser { UserId = user.Id, Account = user.Account, Name = user.RealName, NickName = user.NickName, AccessToken = tokenResult.AccessToken, AppKey = "wxapplet", CreateTime = DateTime.Now, HeadIcon = user.HeadIcon, Gender = user.Gender, ReferralUserId = user.ReferralUserId, MemberGradeId = user.MemberGradeId, Role = roleService.GetRoleEnCode(user.RoleId) }; CurrentUser = currentSession; YuebonCacheHelper yuebonCacheHelper = new YuebonCacheHelper(); TimeSpan expiresSliding = DateTime.Now.AddMinutes(120) - DateTime.Now; yuebonCacheHelper.Add("login_user_" + user.Id, currentSession, expiresSliding, true); result.ErrCode = ErrCode.successCode; result.ResData = currentSession; result.Success = true; } else { result.ErrCode = ErrCode.failCode; } } }catch (Exception ex) { Log4NetHelper.Error("微信快速(一键)登录异常", ex); result.ErrMsg = "微信快速(一键)登录:" + ex.Message; result.ErrCode = ErrCode.failCode; } return(ToJsonContent(result)); }
public IActionResult OnLogin(string code) { CommonResult result = new CommonResult(); try { var jsonResult = SnsApi.JsCode2Json(WxOpenAppId, WxOpenAppSecret, code); if (jsonResult.errcode == ReturnCode.请求成功) { //使用SessionContainer管理登录信息(推荐) var unionId = jsonResult.unionid; var sessionBag = SessionContainer.UpdateSession(null, jsonResult.openid, jsonResult.session_key, unionId); //注意:生产环境下SessionKey属于敏感信息,不能进行传输! //return Json(new { success = true, msg = "OK", sessionId = sessionBag.Key, sessionKey = sessionBag.SessionKey }); YuebonCacheHelper yuebonCacheHelper = new YuebonCacheHelper(); //User user = userApp.GetUserByUnionId(unionId); User user = userService.GetUserByOpenId("yuebon.openid.wxapplet", jsonResult.openid); if (user == null) { UserInputDto userInput = new UserInputDto(); userInput.OpenId = jsonResult.openid; user.UnionId = jsonResult.unionid; userInput.OpenIdType = "yuebon.openid.wxapplet"; userInput.NickName = "游客"; userInput.UnionId = jsonResult.unionid; result.Success = userService.CreateUserByWxOpenId(userInput); } //针对老用户更新UnionId if (user != null && string.IsNullOrEmpty(user.UnionId)) { user.UnionId = jsonResult.unionid; result.Success = userService.Update(user, user.Id); } string userId = string.Empty; if (result.ResData != null) { userId = result.ResData.ToString(); } if (user == null) { user = userService.GetUserByOpenId("yuebon.openid.wxapplet", jsonResult.openid); } var currentSession = (YuebonCurrentUser)(yuebonCacheHelper.Get("login_user_" + userId)); if (currentSession == null || string.IsNullOrWhiteSpace(currentSession.AccessToken)) { JwtOption jwtModel = App.GetService <JwtOption>(); TokenProvider tokenProvider = new TokenProvider(jwtModel); TokenResult tokenResult = tokenProvider.LoginToken(user, "wxapplet"); currentSession = new YuebonCurrentUser { UserId = user.Id, Account = user.Account, Name = user.RealName, NickName = user.NickName, AccessToken = tokenResult.AccessToken, AppKey = "wxapplet", CreateTime = DateTime.Now, HeadIcon = user.HeadIcon, Gender = user.Gender, ReferralUserId = user.ReferralUserId, MemberGradeId = user.MemberGradeId, Role = roleService.GetRoleEnCode(user.RoleId), MobilePhone = user.MobilePhone, WxSessionId = sessionBag.Key }; TimeSpan expiresSliding = DateTime.Now.AddMinutes(120) - DateTime.Now; yuebonCacheHelper.Add("login_user_" + user.Id, currentSession, expiresSliding, true); } CurrentUser = currentSession; result.ResData = currentSession; //new AuthorizeApp().GetAccessedControls(user.Account); result.ErrCode = ErrCode.successCode; result.Success = true; } else { result.ErrCode = ErrCode.failCode; result.ErrMsg = jsonResult.errmsg; } } catch (Exception ex) { result.ErrMsg = ex.Message; } return(ToJsonContent(result)); }
/// <summary> /// /// </summary> /// <param name="context"></param> public override void OnException(ExceptionContext context) { var exception = context.Exception; YuebonCurrentUser currentUser = new YuebonCurrentUser(); string requestPath = context.HttpContext.Request.Path.ToString(); string queryString = context.HttpContext.Request.QueryString.ToString(); var type = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType; string exDesc = requestPath + queryString; Log4NetHelper.Error(type, "全局捕获程序运行异常信息\n\r" + exDesc, context.Exception); CommonResult result = new CommonResult(); if (exception is MyApiException myApiex) { context.HttpContext.Response.StatusCode = 200; context.ExceptionHandled = true; result.ErrMsg = myApiex.Msg; result.ErrCode = myApiex.ErrCode; } else { result.ErrMsg = "程序异常,服务端出现异常![异常消息]" + exception.Message; result.ErrCode = "500"; } JsonSerializerOptions options = new JsonSerializerOptions() { WriteIndented = true, //格式化json字符串 AllowTrailingCommas = true, //可以结尾有逗号 //IgnoreNullValues = true, //可以有空值,转换json去除空值属性 IgnoreReadOnlyProperties = true, //忽略只读属性 PropertyNameCaseInsensitive = true, //忽略大小写 //PropertyNamingPolicy = JsonNamingPolicy.CamelCase //命名方式是默认还是CamelCase Encoder = JavaScriptEncoder.Create(UnicodeRanges.All) }; options.Converters.Add(new DateTimeJsonConverter("yyyy-MM-dd HH:mm:ss")); context.Result = new JsonResult(result, options); Log logEntity = new Log(); var identities = context.HttpContext.User.Identities; var claimsIdentity = identities.First <ClaimsIdentity>(); if (claimsIdentity != null) { List <Claim> claimlist = claimsIdentity.Claims as List <Claim>; if (claimlist.Count > 0) { string userId = claimlist[0].Value; YuebonCacheHelper yuebonCacheHelper = new YuebonCacheHelper(); var user = yuebonCacheHelper.Get("login_user_" + userId).ToJson().ToObject <YuebonCurrentUser>(); if (user != null) { currentUser = user; } } } logEntity.Account = currentUser.Account; logEntity.NickName = currentUser.NickName; logEntity.Date = logEntity.CreatorTime = DateTime.Now; logEntity.IPAddress = currentUser.CurrentLoginIP; logEntity.IPAddressName = currentUser.IPAddressName; logEntity.Result = false; logEntity.Description = $"请求:{exDesc}\r\n异常类型:{exception.GetType().Name} \r\n异常信息:{exception.Message} \r\n【堆栈调用】:\r\n{exception.StackTrace}"; logEntity.Type = "Exception"; service.Insert(logEntity); }