From 2d8739b04f86ab5e73ec7b0d3152e702a90a450b Mon Sep 17 00:00:00 2001 From: 移动系统liao <liaoxujun@qq.com> Date: 星期一, 14 七月 2025 16:34:49 +0800 Subject: [PATCH] 修改用户扩展资料 --- Admin.NET/FZCTB.NET.API.Application/Auth/AuthService.cs | 224 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 223 insertions(+), 1 deletions(-) diff --git a/Admin.NET/FZCTB.NET.API.Application/Auth/AuthService.cs b/Admin.NET/FZCTB.NET.API.Application/Auth/AuthService.cs index b4f00fe..4c6b98e 100644 --- a/Admin.NET/FZCTB.NET.API.Application/Auth/AuthService.cs +++ b/Admin.NET/FZCTB.NET.API.Application/Auth/AuthService.cs @@ -1,10 +1,26 @@ -锘縰sing Furion.DynamicApiController; +锘縰sing Admin.NET.Core.Service; +using Admin.NET.Core; +using Furion.DataEncryption; +using Furion.DynamicApiController; +using Furion.EventBus; using Microsoft.AspNetCore.Mvc; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using Lazy.Captcha.Core; +using Microsoft.AspNetCore.Http; +using FZCZTB.NET.MD.CutomerMd; +using Microsoft.AspNetCore.Authorization; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel; +using FZCZTB.NET.SYSService.MSM; +using FZCTB.NET.API.Application.Auth.DTO; +using Furion.FriendlyException; +using FZCZTB.NET.SYSService.CustomerSYS; +using Furion; +using NewLife; namespace FZCTB.NET.API.Application.Auth { @@ -14,5 +30,211 @@ [ApiDescriptionSettings("FZCAPISYS", Order = 149)] public class AuthService: IDynamicApiController { + + + private readonly UserManager _userManager; + private readonly SqlSugarRepository<FBS_Customer> _sysUserRep; + private readonly IHttpContextAccessor _httpContextAccessor; + private readonly SysMenuService _sysMenuService; + private readonly SysOnlineUserService _sysOnlineUserService; + private readonly SysConfigService _sysConfigService; + private readonly SysUserService _sysUserService; + private readonly ZCSMSService _sysSmsService; + private readonly SysLdapService _sysLdapService; + private readonly ICaptcha _captcha; + private readonly IEventPublisher _eventPublisher; + private readonly SysCacheService _sysCacheService; + + public AuthService( + SqlSugarRepository<FBS_Customer> sysUserRep, + IHttpContextAccessor httpContextAccessor, + SysOnlineUserService sysOnlineUserService, + SysConfigService sysConfigService, + SysLdapService sysLdapService, + IEventPublisher eventPublisher, + ZCSMSService sysSmsService, + SysCacheService sysCacheService, + SysMenuService sysMenuService, + SysUserService sysUserService, + UserManager userManager, + ICaptcha captcha) + { + _captcha = captcha; + _sysUserRep = sysUserRep; + _userManager = userManager; + _sysSmsService = sysSmsService; + _eventPublisher = eventPublisher; + _sysUserService = sysUserService; + _sysMenuService = sysMenuService; + _sysCacheService = sysCacheService; + _sysConfigService = sysConfigService; + _httpContextAccessor = httpContextAccessor; + _sysOnlineUserService = sysOnlineUserService; + _sysLdapService = sysLdapService; + } + + /// <summary> + /// 鎵嬫満鍙风櫥褰� 馃敄 + /// </summary> + /// <param name="input"></param> + /// <returns></returns> + [AllowAnonymous] + [DisplayName("鎵嬫満鍙风櫥褰�")] + public virtual async Task<CustomerLoginOutput> LoginPhone([Required] CustomerLoginPhoneInput input) + { + if(input.Code!="TEST") + // 鏍¢獙鐭俊楠岃瘉鐮� + _sysSmsService.VerifyCode(new SmsVerifyCodeInput { Phone = input.Phone, Code = input.Code }); + + // 鑾峰彇鐧诲綍绉熸埛鍜岀敤鎴� + // 鑾峰彇鐧诲綍绉熸埛鍜岀敤鎴� + var user = await _sysUserRep.AsQueryable().Where(x => x.Account == input.Phone).Includes(x => x.CoutomerExRols, y => y.ExRole).FirstAsync(); + if (user == null) + { + throw Oops.Oh("璇ョ敤鎴锋病鏈夋敞鍐�"); + } + if(user.Status== StatusEnum.Disable) + { + throw Oops.Oh("鐢ㄥ紓甯�"); + } + + + return await CreateToken(user, input.ExRuleCode??""); + } + + /// <summary> + /// 鍒囨崲瑙掕壊 宸茬櫥褰曡繘鍘昏鑹叉垨鑰呭垏鎹㈣鑹叉槸璋冪敤锛岄渶瑕佹浛鎹oken,鐩稿綋浜庣櫥褰� + /// </summary> + [DisplayName("鍒囨崲瑙掕壊")] + public async Task<CustomerLoginOutput> ChangeLogoInExRule(string RuleCode) + { + var id = App.User.FindFirst(ClaimConst.UserId)?.Value.ToLong() ?? 0; + if (id == 0) + { + throw Oops.Oh("鐢ㄦ埛鍑瘉閿欒"); + + } + // + + // 鑾峰彇鐧诲綍绉熸埛鍜岀敤鎴� + // 鑾峰彇鐧诲綍绉熸埛鍜岀敤鎴� + var user = await _sysUserRep.AsQueryable().Where(x => x.Id == id).Includes(x => x.CoutomerExRols, y => y.ExRole).FirstAsync(); + if (user == null) + { + throw Oops.Oh("璇ョ敤鎴锋病鏈夋敞鍐�"); + } + if (user.Status == StatusEnum.Disable) + { + throw Oops.Oh("鐢ㄥ紓甯�"); + } + + return await CreateToken(user, RuleCode); + + } + + /// <summary> + /// 鎵嬫満鍙风櫥褰� 馃敄 + /// </summary> + /// <param name="input"></param> + /// <returns></returns> + [AllowAnonymous] + [DisplayName("寰俊鎵爜鐧诲綍")] + public virtual async Task<CustomerLoginOutput> WeiXinLoginPhone([Required] CustomerLoginPhoneInput input) + { + throw Oops.Oh("鍜嬩笉鏀寔寰俊鎵爜鐧诲綍"); + // 鏍¢獙鐭俊楠岃瘉鐮� + _sysSmsService.VerifyCode(new SmsVerifyCodeInput { Phone = input.Phone, Code = input.Code }); + + // 鑾峰彇鐧诲綍绉熸埛鍜岀敤鎴� + var user = await _sysUserRep.AsQueryable().Where(x=>x.Account==input.Phone).Includes(x => x.CoutomerExRols, y => y.ExRole).FirstAsync(); + if(user==null) + { + + } + + return await CreateToken(user, input.ExRuleCode ); + } + + /// <summary> + /// 鐢熸垚Token浠ょ墝 馃敄 + /// </summary> + /// <param name="user"></param>\ + /// <param name="sysUserEventTypeEnum"></param>\ + /// <returns></returns> + [NonAction] + internal async Task<CustomerLoginOutput> CreateToken(FBS_Customer user,string ExRuleCode, SysUserEventTypeEnum sysUserEventTypeEnum = SysUserEventTypeEnum.Login) + { + // 鍗曠敤鎴风櫥褰� + await _sysOnlineUserService.SingleLogin(user.Id); + + // 鐢熸垚Token浠ょ墝 + var tokenExpire = await _sysConfigService.GetTokenExpire(); + var accessToken = JWTEncryption.Encrypt(new Dictionary<string, object> + { + { ClaimConst.UserId, user.Id }, + { ClaimConst.TenantId, user.TenantId }, + { ClaimConst.Account, user.Account }, + { ClaimConst.RealName, user.RealName }, + + { ClaimConst.UserType, "Customer" }, + { ClaimConst.CustomerLogoinType, ExRuleCode }, + }, tokenExpire); + + // 鐢熸垚鍒锋柊Token浠ょ墝 + var refreshTokenExpire = await _sysConfigService.GetRefreshTokenExpire(); + var refreshToken = JWTEncryption.GenerateRefreshToken(accessToken, refreshTokenExpire); + + // 璁剧疆鍝嶅簲鎶ユ枃澶� + _httpContextAccessor.HttpContext.SetTokensOfResponseHeaders(accessToken, refreshToken); + + // Swagger Knife4UI-AfterScript鐧诲綍鑴氭湰 + // ke.global.setAllHeader('Authorization', 'Bearer ' + ke.response.headers['access-token']); + + // 鏇存柊鐢ㄦ埛鐧诲綍淇℃伅 + user.LastLoginIp = _httpContextAccessor.HttpContext.GetRemoteIpAddressToIPv4(true); + (user.LastLoginAddress, double? longitude, double? latitude) = CommonUtil.GetIpAddress(user.LastLoginIp); + user.LastLoginTime = DateTime.Now; + user.LastLoginDevice = CommonUtil.GetClientDeviceInfo(_httpContextAccessor.HttpContext?.Request?.Headers?.UserAgent); + await _sysUserRep.AsUpdateable(user).UpdateColumns(u => new + { + u.LastLoginIp, + u.LastLoginAddress, + u.LastLoginTime, + u.LastLoginDevice, + }).ExecuteCommandAsync(); + + var payload = new + { + Entity = user, + Output = new CustomerLoginOutput + { + AccessToken = accessToken, + RefreshToken = refreshToken, + + + + + + + } + }; + payload.Output.ExRoles = new List<CustomerExRoleVm>(); + + foreach (var item in user.CoutomerExRols) + { + + payload.Output.ExRoles.Add(new CustomerExRoleVm + { + Code = item.ExRole.Code, + Name = item.ExRole.Name, + HasFlsh = item.HasFlsh + }); + } + + //鏆傛椂涓嶅嚭鐢ㄦ埛浜嬩欢 + // 鍙戝竷绯荤粺鐢ㄦ埛鎿嶄綔浜嬩欢 + //await _eventPublisher.PublishAsync(sysUserEventTypeEnum, payload); + return payload.Output; + } } } -- Gitblit v1.9.1