From 5ee5f2e1d6e686b94374b2cf7deb06784797bcdd Mon Sep 17 00:00:00 2001 From: zuohuaijun Date: Thu, 10 Apr 2025 15:25:20 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=98=8E1=E3=80=81=E4=BF=AE=E5=A4=8Dtoken?= =?UTF-8?q?=E5=A4=B1=E6=95=88=E7=99=BB=E5=BD=95=E5=8F=8A=E6=9D=83=E9=99=90?= =?UTF-8?q?=E9=97=AE=E9=A2=98=20=20=202=E3=80=81=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E7=B3=BB=E7=BB=9F=E5=8D=87=E7=BA=A7=E7=89=88=E6=9C=AC=E5=8F=B7?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E5=A4=84=E7=90=86=E4=BB=A3=E7=A0=81=20=20=20?= =?UTF-8?q?3=E3=80=81=E6=B8=85=E7=90=86=E4=BB=A3=E7=A0=81=E5=8F=8A?= =?UTF-8?q?=E5=90=8C=E6=AD=A5=E5=89=8D=E7=AB=AF=E8=AF=B7=E6=B1=82=E6=96=87?= =?UTF-8?q?=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Admin.NET/Admin.NET.Application/Startup.cs | 11 +- Admin.NET/Admin.NET.Core/Const/ConfigConst.cs | 3 +- .../SeedData/SysConfigSeedData.cs | 2 +- .../Service/User/Dto/UserInput.cs | 10 +- .../Service/User/SysUserService.cs | 30 ++--- .../Admin.NET.Core/SqlSugar/SqlSugarSetup.cs | 123 +++++++++++------- Admin.NET/Admin.NET.Core/Utils/CommonUtil.cs | 4 +- .../Admin.NET.Web.Core/Handlers/JwtHandler.cs | 44 +++---- .../api-services/apis/sys-wechat-pay-api.ts | 8 +- .../models/reset-pwd-user-input.ts | 2 +- Web/src/views/system/user/index.vue | 14 +- 11 files changed, 137 insertions(+), 114 deletions(-) diff --git a/Admin.NET/Admin.NET.Application/Startup.cs b/Admin.NET/Admin.NET.Application/Startup.cs index ae7fda8d..51be1c52 100644 --- a/Admin.NET/Admin.NET.Application/Startup.cs +++ b/Admin.NET/Admin.NET.Application/Startup.cs @@ -19,6 +19,7 @@ public class Startup : AppStartup public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { } + /// /// 初始化与升级数据,在初始化表结构之前调用 /// @@ -27,8 +28,9 @@ public class Startup : AppStartup /// 当前版本,由ConfigConst.SysCurrentVersion转换的整数版本 public void BeforeInitTable(SqlSugarScopeProvider dbProvider, long oldVerion, long currentVersion) { - //比较版本号对数据库进行升级结构、种子数据等 + // 比较版本号对数据库进行升级结构、种子数据等 } + /// /// 初始化与升级数据,在初始化种子数据之后调用 /// @@ -37,7 +39,7 @@ public class Startup : AppStartup /// 当前版本,由ConfigConst.SysCurrentVersion转换的整数版本 public void AfterInitSeed(SqlSugarScopeProvider dbProvider, long oldVerion, long currentVersion) { - //比较版本号对数据库进行升级结构、种子数据等 + // 比较版本号对数据库进行升级结构、种子数据等 } } @@ -55,8 +57,9 @@ public class TestStartup : AppStartup /// 当前版本,由ConfigConst.SysCurrentVersion转换的整数版本 public void BeforeInitTable(SqlSugarScopeProvider dbProvider, long oldVerion, long currentVersion) { - //比较版本号对数据库进行升级结构、种子数据等 + // 比较版本号对数据库进行升级结构、种子数据等 } + /// /// 初始化与升级数据,在初始化种子数据之后调用 /// @@ -65,6 +68,6 @@ public class TestStartup : AppStartup /// 当前版本,由ConfigConst.SysCurrentVersion转换的整数版本 public void AfterInitSeed(SqlSugarScopeProvider dbProvider, long oldVerion, long currentVersion) { - //比较版本号对数据库进行升级结构、种子数据等 + // 比较版本号对数据库进行升级结构、种子数据等 } } \ No newline at end of file diff --git a/Admin.NET/Admin.NET.Core/Const/ConfigConst.cs b/Admin.NET/Admin.NET.Core/Const/ConfigConst.cs index ef63591c..f69cdf9f 100644 --- a/Admin.NET/Admin.NET.Core/Const/ConfigConst.cs +++ b/Admin.NET/Admin.NET.Core/Const/ConfigConst.cs @@ -15,8 +15,9 @@ public class ConfigConst /// 系统版本code /// public const string SysVersion = "sys_version"; + /// - /// 当前系统版本值,标准版本号为 x.xx.xxxxxx。比如 1.01.250409,也可以是变体,比如 1.2.5 v1.2.5 + /// 当前系统版本值,标准版本号为 x.xx.xxxxxx。比如 1.01.250409,也可以是变体,比如 1.2.5 => v1.2.5 /// public const string SysCurrentVersion = "1.01.000001"; diff --git a/Admin.NET/Admin.NET.Core/SeedData/SysConfigSeedData.cs b/Admin.NET/Admin.NET.Core/SeedData/SysConfigSeedData.cs index 33cac5f6..46ce8f83 100644 --- a/Admin.NET/Admin.NET.Core/SeedData/SysConfigSeedData.cs +++ b/Admin.NET/Admin.NET.Core/SeedData/SysConfigSeedData.cs @@ -40,7 +40,7 @@ public class SysConfigSeedData : ISqlSugarEntitySeedData new SysConfig{ Id=1300000000271, Name="显示系统更新日志", Code=ConfigConst.SysUpgrade, Value="True", SysFlag=YesNoEnum.Y, Remark="是否显示系统更新日志", OrderNo=220, GroupCode=ConfigConst.SysDefaultGroup, CreateTime=DateTime.Parse("2024-12-20 00:00:00") }, new SysConfig{ Id=1300000000281, Name="开启多语言切换", Code=ConfigConst.SysI18NSwitch, Value="True", SysFlag=YesNoEnum.Y, Remark="是否显示多语言切换按钮", OrderNo=230, GroupCode=ConfigConst.SysDefaultGroup, CreateTime=DateTime.Parse("2024-12-20 00:00:00") }, - new SysConfig{ Id=1300000000999, Name="系统版本", Code=ConfigConst.SysVersion, Value="0", SysFlag=YesNoEnum.Y, Remark= "系统版本,用于自动升级,请勿手动填写", OrderNo=1000, GroupCode=ConfigConst.SysDefaultGroup, CreateTime=DateTime.Parse("2022-02-10 00:00:00") }, + new SysConfig{ Id=1300000000999, Name="系统版本号", Code=ConfigConst.SysVersion, Value="0", SysFlag=YesNoEnum.Y, Remark= "系统版本号,用于自动升级,请勿手动填写", OrderNo=1000, GroupCode=ConfigConst.SysDefaultGroup, CreateTime=DateTime.Parse("2025-04-10 00:00:00") }, ]; } } \ No newline at end of file diff --git a/Admin.NET/Admin.NET.Core/Service/User/Dto/UserInput.cs b/Admin.NET/Admin.NET.Core/Service/User/Dto/UserInput.cs index 553cd62c..61137fbf 100644 --- a/Admin.NET/Admin.NET.Core/Service/User/Dto/UserInput.cs +++ b/Admin.NET/Admin.NET.Core/Service/User/Dto/UserInput.cs @@ -52,13 +52,13 @@ public class AddUserInput : SysUser /// /// 账号 /// - [Required(ErrorMessage = "账号不能为空")] + [Required(ErrorMessage = "账号不能为空")] public override string Account { get; set; } /// /// 真实姓名 /// - [Required(ErrorMessage = "真实姓名不能为空")] + [Required(ErrorMessage = "真实姓名不能为空")] public override string RealName { get; set; } /// @@ -101,7 +101,7 @@ public class DeleteUserInput : BaseIdInput public class ResetPwdUserInput : BaseIdInput { /// - /// 新密码(如果为空使用系统配置的默认密码) + /// 新密码(若空则用默认密码) /// public string NewPassword { get; set; } } @@ -114,13 +114,13 @@ public class ChangePwdInput /// /// 当前密码 /// - [Required(ErrorMessage = "当前密码不能为空")] + [Required(ErrorMessage = "当前密码不能为空")] public string PasswordOld { get; set; } /// /// 新密码 /// - [Required(ErrorMessage = "新密码不能为空"), MinLength(5, ErrorMessage = "密码需要大于5个字符")] + [Required(ErrorMessage = "新密码不能为空"), MinLength(5, ErrorMessage = "密码需要大于5个字符")] public string PasswordNew { get; set; } } diff --git a/Admin.NET/Admin.NET.Core/Service/User/SysUserService.cs b/Admin.NET/Admin.NET.Core/Service/User/SysUserService.cs index c4ead6c5..7ad4deb8 100644 --- a/Admin.NET/Admin.NET.Core/Service/User/SysUserService.cs +++ b/Admin.NET/Admin.NET.Core/Service/User/SysUserService.cs @@ -57,7 +57,7 @@ public class SysUserService : IDynamicApiController, ITransient /// /// /// - [DisplayName("获取用户分页列表")] + [DisplayName("获取用户分页列表")] public virtual async Task> Page(PageUserInput input) { // 获取用户拥有的机构集合 @@ -100,7 +100,7 @@ public class SysUserService : IDynamicApiController, ITransient /// [UnitOfWork] [ApiDescriptionSettings(Name = "Add"), HttpPost] - [DisplayName("增加用户")] + [DisplayName("增加用户")] public virtual async Task AddUser(AddUserInput input) { var query = _sysUserRep.AsQueryable().ClearFilter(); @@ -133,7 +133,7 @@ public class SysUserService : IDynamicApiController, ITransient /// [UnitOfWork] [ApiDescriptionSettings(Name = "Update"), HttpPost] - [DisplayName("更新用户")] + [DisplayName("更新用户")] public virtual async Task UpdateUser(UpdateUserInput input) { var query = _sysUserRep.AsQueryable().ClearFilter().Where(u => u.Id != input.Id); @@ -183,7 +183,7 @@ public class SysUserService : IDynamicApiController, ITransient /// [UnitOfWork] [ApiDescriptionSettings(Name = "Delete"), HttpPost] - [DisplayName("删除用户")] + [DisplayName("删除用户")] public virtual async Task DeleteUser(DeleteUserInput input) { var user = await _sysUserRep.GetByIdAsync(input.Id) ?? throw Oops.Oh(ErrorCodeEnum.D0009); @@ -224,7 +224,7 @@ public class SysUserService : IDynamicApiController, ITransient /// 查看用户基本信息 🔖 /// /// - [DisplayName("查看用户基本信息")] + [DisplayName("查看用户基本信息")] public virtual async Task GetBaseInfo() { return await _sysUserRep.GetByIdAsync(_userManager.UserId); @@ -235,7 +235,7 @@ public class SysUserService : IDynamicApiController, ITransient /// /// [ApiDescriptionSettings(Name = "UpdateBaseInfo"), HttpPost] - [DisplayName("更新用户基本信息")] + [DisplayName("更新用户基本信息")] public virtual async Task UpdateBaseInfo(SysUser user) { return await _sysUserRep.AsUpdateable(user) @@ -248,7 +248,7 @@ public class SysUserService : IDynamicApiController, ITransient /// /// [UnitOfWork] - [DisplayName("设置用户状态")] + [DisplayName("设置用户状态")] public virtual async Task SetStatus(UserInput input) { if (_userManager.UserId == input.Id) @@ -281,7 +281,7 @@ public class SysUserService : IDynamicApiController, ITransient /// /// [UnitOfWork] - [DisplayName("授权用户角色")] + [DisplayName("授权用户角色")] public async Task GrantRole(UserRoleInput input) { var user = await _sysUserRep.GetByIdAsync(input.UserId) ?? throw Oops.Oh(ErrorCodeEnum.D0009); @@ -304,7 +304,7 @@ public class SysUserService : IDynamicApiController, ITransient /// /// /// - [DisplayName("修改用户密码")] + [DisplayName("修改用户密码")] public virtual async Task ChangePwd(ChangePwdInput input) { // 国密SM2解密(前端密码传输SM2加密后的) @@ -369,11 +369,11 @@ public class SysUserService : IDynamicApiController, ITransient /// /// /// - [DisplayName("重置用户密码")] + [DisplayName("重置用户密码")] public virtual async Task ResetPwd(ResetPwdUserInput input) { var user = await _sysUserRep.GetByIdAsync(input.Id) ?? throw Oops.Oh(ErrorCodeEnum.D0009); - string password = await _sysConfigService.GetConfigValueByCode(ConfigConst.SysPassword); + var password = await _sysConfigService.GetConfigValueByCode(ConfigConst.SysPassword); if (!string.IsNullOrEmpty(input.NewPassword)) password = input.NewPassword; user.Password = CryptogramUtil.Encrypt(password); @@ -397,7 +397,7 @@ public class SysUserService : IDynamicApiController, ITransient /// 验证密码有效期 🔖 /// /// - [DisplayName("验证密码有效期")] + [DisplayName("验证密码有效期")] public async Task VerifyPwdExpirationTime() { var sysConfig = await _sysConfigService.GetConfig(ConfigConst.SysPasswordExpirationTime); @@ -417,7 +417,7 @@ public class SysUserService : IDynamicApiController, ITransient /// /// /// - [DisplayName("解除登录锁定")] + [DisplayName("解除登录锁定")] public virtual async Task UnlockLogin(UnlockLoginInput input) { var user = await _sysUserRep.GetByIdAsync(input.Id) ?? throw Oops.Oh(ErrorCodeEnum.D0009); @@ -435,7 +435,7 @@ public class SysUserService : IDynamicApiController, ITransient /// /// /// - [DisplayName("获取用户拥有角色集合")] + [DisplayName("获取用户拥有角色集合")] public async Task GetOwnRoleList(long userId) { // 获取当前用户已分配角色 @@ -454,7 +454,7 @@ public class SysUserService : IDynamicApiController, ITransient /// /// /// - [DisplayName("获取用户扩展机构集合")] + [DisplayName("获取用户扩展机构集合")] public async Task> GetOwnExtOrgList(long userId) { return await _sysUserExtOrgService.GetUserExtOrgList(userId); diff --git a/Admin.NET/Admin.NET.Core/SqlSugar/SqlSugarSetup.cs b/Admin.NET/Admin.NET.Core/SqlSugar/SqlSugarSetup.cs index 327b0f72..446acb7f 100644 --- a/Admin.NET/Admin.NET.Core/SqlSugar/SqlSugarSetup.cs +++ b/Admin.NET/Admin.NET.Core/SqlSugar/SqlSugarSetup.cs @@ -352,11 +352,6 @@ public static class SqlSugarSetup }; } - private static int GetStartupOrder(Type type) - { - return !type.IsDefined(typeof(AppStartupAttribute), true) ? 0 : type.GetCustomAttribute(true).Order; - } - /// /// 初始化数据库 /// @@ -373,45 +368,8 @@ public static class SqlSugarSetup if (config.DbType != SqlSugar.DbType.Oracle) dbProvider.DbMaintenance.CreateDatabase(); } - // 扫描所有继承 AppStartup 的类 - var startups = App.EffectiveTypes - .Where(u => typeof(AppStartup).IsAssignableFrom(u) && u.IsClass && !u.IsAbstract && !u.IsGenericType) - .OrderByDescending(u => GetStartupOrder(u)); - //数据库前处理 - long oldVerion = 0, currentVersion = 0; - SysConfig versionCfg = null; - try - { - //获取旧版本号 - try - { - if (dbProvider.CurrentConnectionConfig.ConfigId.ToString() == SqlSugarConst.MainConfigId) - { - versionCfg = dbProvider.Queryable().Where(n => n.Code == ConfigConst.SysVersion).First(); - oldVerion = versionCfg != null ? CommonUtil.ConvertVersionToLong(versionCfg.Value) : 0; - } - else - { - oldVerion = -1; - } - } - catch (Exception ex) { } - finally - { - currentVersion = CommonUtil.ConvertVersionToLong(ConfigConst.SysCurrentVersion); - } - //执行 - foreach (var type in startups) - { - var startup = Activator.CreateInstance(type) as AppStartup; - var initDataMethod = type.GetMethod("BeforeInitTable"); - initDataMethod?.Invoke(startup, new[] { (object)dbProvider, oldVerion, currentVersion }); - } - } - catch (Exception ex) - { - Log.Information($"数据库前处理有错 {config.DbType} - {config.ConfigId} : {ex.Message}"); - } + // 初始化表结构之前——系统版本号 + var (startups, oldVerion, currentVersion) = BeforeInitTable(dbProvider, config); // 初始化表结构 if (config.TableSettings.EnableInitTable) @@ -454,34 +412,99 @@ public static class SqlSugarSetup // 初始化种子数据 if (config.SeedSettings.EnableInitSeed) InitSeedData(db, config); - //数据后处理 + // 初始化种子数据之后——系统版本号 + AfterInitSeed(dbProvider, config, startups, oldVerion, currentVersion); + } + + /// + /// 初始化表结构之前(版本号) + /// + /// + /// + /// + private static (IOrderedEnumerable startups, long oldVerion, long currentVersion) BeforeInitTable(SqlSugarScopeProvider dbProvider, DbConnectionConfig config) + { + // 扫描所有继承 AppStartup 的类(排序执行顺序) + var startups = App.EffectiveTypes + .Where(u => typeof(AppStartup).IsAssignableFrom(u) && u.IsClass && !u.IsAbstract && !u.IsGenericType && u.GetMethod("BeforeInitTable") != null) + .OrderByDescending(u => !u.IsDefined(typeof(AppStartupAttribute), true) ? 0 : u.GetCustomAttribute(true).Order); + if (startups == null || !startups.Any()) return (startups, 0, 0); + + long oldVerion = 0, currentVersion = 0; + SysConfig versionCfg = null; + try + { + try + { + // 获取系统版本号 + if (dbProvider.CurrentConnectionConfig.ConfigId.ToString() == SqlSugarConst.MainConfigId) + { + versionCfg = dbProvider.Queryable().Where(u => u.Code == ConfigConst.SysVersion).First(); + oldVerion = versionCfg != null ? CommonUtil.ConvertVersionToLong(versionCfg.Value) : 0; + } + else + { + oldVerion = -1; + } + } + catch { } + finally + { + currentVersion = CommonUtil.ConvertVersionToLong(ConfigConst.SysCurrentVersion); + } + foreach (var type in startups) + { + var startup = Activator.CreateInstance(type) as AppStartup; + var initDataMethod = type.GetMethod("BeforeInitTable"); + initDataMethod?.Invoke(startup, [dbProvider, oldVerion, currentVersion]); + } + } + catch (Exception ex) + { + Log.Information($"数据库初始化表结构之前有错 {config.DbType} - {config.ConfigId} : {ex.Message}"); + } + + return (startups, oldVerion, currentVersion); + } + + /// + /// 初始化种子数据之后(版本号) + /// + /// + /// + /// + /// + /// + private static void AfterInitSeed(SqlSugarScopeProvider dbProvider, DbConnectionConfig config, IOrderedEnumerable startups, long oldVerion, long currentVersion) + { + if (startups == null || !startups.Any()) return; + try { - //执行后处理 foreach (var type in startups) { var startup = Activator.CreateInstance(type) as AppStartup; if (startup == null) continue; var initDataMethod = type.GetMethod("AfterInitSeed"); if (initDataMethod == null) continue; - initDataMethod?.Invoke(startup, new[] { (object)dbProvider, oldVerion, currentVersion }); + initDataMethod?.Invoke(startup, [dbProvider, oldVerion, currentVersion]); } } catch (Exception ex) { - string errr = $"数据库后处理有错 {config.DbType} - {config.ConfigId} : {ex.Message}"; + string errr = $"数据库初始化种子数据之后有错 {config.DbType} - {config.ConfigId} : {ex.Message}"; Log.Information(errr); Console.WriteLine(errr); Console.WriteLine(ex.StackTrace); } finally { - //最后更新版本 + // 更新系统版本号 if (dbProvider.CurrentConnectionConfig.ConfigId.ToString() == SqlSugarConst.MainConfigId) { IEnumerable cfgs = [ - new SysConfig{ Id=1300000000999, Name="系统版本", Code=ConfigConst.SysVersion, Value=ConfigConst.SysCurrentVersion, SysFlag=YesNoEnum.Y, Remark= "系统版本,用于自动升级,请勿手动填写", OrderNo=1000, GroupCode=ConfigConst.SysDefaultGroup, CreateTime=DateTime.Parse("2022-02-10 00:00:00") } + new SysConfig{ Id=1300000000999, Name="系统版本号", Code=ConfigConst.SysVersion, Value=ConfigConst.SysCurrentVersion, SysFlag=YesNoEnum.Y, Remark= "系统版本号,用于自动升级,请勿手动填写", OrderNo=1000, GroupCode=ConfigConst.SysDefaultGroup, CreateTime=DateTime.Parse("2025-04-10 00:00:00") } ]; var storage = dbProvider.StorageableByObject(cfgs.ToList()).ToStorage(); storage.AsInsertable.ExecuteCommand(); diff --git a/Admin.NET/Admin.NET.Core/Utils/CommonUtil.cs b/Admin.NET/Admin.NET.Core/Utils/CommonUtil.cs index 091916f6..cee55787 100644 --- a/Admin.NET/Admin.NET.Core/Utils/CommonUtil.cs +++ b/Admin.NET/Admin.NET.Core/Utils/CommonUtil.cs @@ -39,8 +39,9 @@ public static class CommonUtil return Math.Abs(hash1 + (hash2 * 1566083941)); } } + /// - /// 将版本号转换为长整型,版本格式要求 x.xx.xxxxxx,比如 v1.2.5=>102000005 V3.10.42=>310000042 + /// 将版本号转换为长整型,版本格式要求 x.xx.xxxxxx,比如 v1.2.5=>102000005 V3.10.42=>310000042 /// /// x.xx.xxxxxx /// @@ -82,6 +83,7 @@ public static class CommonUtil throw new ArgumentException("版本号转换失败,结果超出 long 范围。"); } } + /// /// 生成百分数 /// diff --git a/Admin.NET/Admin.NET.Web.Core/Handlers/JwtHandler.cs b/Admin.NET/Admin.NET.Web.Core/Handlers/JwtHandler.cs index 5b49ec55..a331ca7d 100644 --- a/Admin.NET/Admin.NET.Web.Core/Handlers/JwtHandler.cs +++ b/Admin.NET/Admin.NET.Web.Core/Handlers/JwtHandler.cs @@ -30,20 +30,36 @@ namespace Admin.NET.Web.Core } /// - /// 自动刷新Token + /// 令牌/Token校验核心逻辑 /// /// /// /// public override async Task HandleAsync(AuthorizationHandlerContext context, DefaultHttpContext httpContext) { - // var serviceProvider = context.GetCurrentHttpContext().RequestServices; using var serviceScope = _serviceProvider.CreateScope(); var sysCacheService = serviceScope.ServiceProvider.GetRequiredService(); + var sysConfigService = serviceScope.ServiceProvider.GetRequiredService(); + var tokenExpire = await sysConfigService.GetTokenExpire(); + var refreshTokenExpire = await sysConfigService.GetRefreshTokenExpire(); + if (JWTEncryption.AutoRefreshToken(context, context.GetCurrentHttpContext(), tokenExpire, refreshTokenExpire)) + { + await AuthorizeHandleAsync(context); + } + else + { + context.Fail(new AuthorizationFailureReason(this, "登录已过期,请重新登录。")); + var currentHttpContext = context.GetCurrentHttpContext(); + // 跳过签名 SignatureAuthentication 引发的失败 + if (currentHttpContext.Items.ContainsKey(SignatureAuthenticationDefaults.AuthenticateFailMsgKey)) return; + currentHttpContext.SignoutToSwagger(); + return; + } + // 验证Token版本号 - var userId = context.User.FindFirst(ClaimConst.UserId)?.Value; - var tokenVersion1 = context.User.FindFirst(ClaimConst.TokenVersion)?.Value; + var userId = httpContext.User.FindFirst(ClaimConst.UserId)?.Value; + var tokenVersion1 = httpContext.User.FindFirst(ClaimConst.TokenVersion)?.Value; var tokenVersion2 = sysCacheService.Get($"{CacheConst.KeyUserToken}{userId}"); if (string.IsNullOrWhiteSpace(tokenVersion2) && !string.IsNullOrWhiteSpace(userId)) { @@ -66,7 +82,7 @@ namespace Admin.NET.Web.Core } // 验证租户有效期 - var tenantId = context.User.FindFirst(ClaimConst.TenantId)?.Value; + var tenantId = httpContext.User.FindFirst(ClaimConst.TenantId)?.Value; if (!string.IsNullOrWhiteSpace(tenantId)) { var tenant = sysCacheService.Get>(CacheConst.KeyTenant)?.FirstOrDefault(u => u.Id == long.Parse(tenantId)); @@ -74,26 +90,8 @@ namespace Admin.NET.Web.Core { context.Fail(new AuthorizationFailureReason(this, "租户已过期,请联系管理员。")); context.GetCurrentHttpContext().SignoutToSwagger(); - return; } } - - var sysConfigService = serviceScope.ServiceProvider.GetRequiredService(); - var tokenExpire = await sysConfigService.GetTokenExpire(); - var refreshTokenExpire = await sysConfigService.GetRefreshTokenExpire(); - if (JWTEncryption.AutoRefreshToken(context, context.GetCurrentHttpContext(), tokenExpire, refreshTokenExpire)) - { - await AuthorizeHandleAsync(context); - } - else - { - // 授权失败 - context.Fail(); - var currentHttpContext = context.GetCurrentHttpContext(); - // 跳过签名 SignatureAuthentication 引发的失败 - if (currentHttpContext.Items.ContainsKey(SignatureAuthenticationDefaults.AuthenticateFailMsgKey)) return; - currentHttpContext.SignoutToSwagger(); - } } public override async Task PipelineAsync(AuthorizationHandlerContext context, DefaultHttpContext httpContext) diff --git a/Web/src/api-services/apis/sys-wechat-pay-api.ts b/Web/src/api-services/apis/sys-wechat-pay-api.ts index 0a26d54f..cb1b44db 100644 --- a/Web/src/api-services/apis/sys-wechat-pay-api.ts +++ b/Web/src/api-services/apis/sys-wechat-pay-api.ts @@ -703,7 +703,7 @@ export const SysWechatPayApiAxiosParamCreator = function (configuration?: Config }; }, /** - * 必填字段:OutTradeNumber,Reason + * * @summary 退款申请 🔖 https://pay.weixin.qq.com/docs/merchant/apis/mini-program-payment/create.html * @param {RefundRequestInput} [body] * @param {*} [options] Override http request option. @@ -954,7 +954,7 @@ export const SysWechatPayApiFp = function(configuration?: Configuration) { }; }, /** - * 必填字段:OutTradeNumber,Reason + * * @summary 退款申请 🔖 https://pay.weixin.qq.com/docs/merchant/apis/mini-program-payment/create.html * @param {RefundRequestInput} [body] * @param {*} [options] Override http request option. @@ -1115,7 +1115,7 @@ export const SysWechatPayApiFactory = function (configuration?: Configuration, b return SysWechatPayApiFp(configuration).apiSysWechatPayRefundListGet(transactionId, outTradeNumber, options).then((request) => request(axios, basePath)); }, /** - * 必填字段:OutTradeNumber,Reason + * * @summary 退款申请 🔖 https://pay.weixin.qq.com/docs/merchant/apis/mini-program-payment/create.html * @param {RefundRequestInput} [body] * @param {*} [options] Override http request option. @@ -1287,7 +1287,7 @@ export class SysWechatPayApi extends BaseAPI { return SysWechatPayApiFp(this.configuration).apiSysWechatPayRefundListGet(transactionId, outTradeNumber, options).then((request) => request(this.axios, this.basePath)); } /** - * 必填字段:OutTradeNumber,Reason + * * @summary 退款申请 🔖 https://pay.weixin.qq.com/docs/merchant/apis/mini-program-payment/create.html * @param {RefundRequestInput} [body] * @param {*} [options] Override http request option. diff --git a/Web/src/api-services/models/reset-pwd-user-input.ts b/Web/src/api-services/models/reset-pwd-user-input.ts index 4ad9990c..71c1646b 100644 --- a/Web/src/api-services/models/reset-pwd-user-input.ts +++ b/Web/src/api-services/models/reset-pwd-user-input.ts @@ -29,7 +29,7 @@ export interface ResetPwdUserInput { id: number; /** - * 新密码(如果为空使用系统配置的默认密码) + * 新密码(若空则用默认密码) * * @type {string} * @memberof ResetPwdUserInput diff --git a/Web/src/views/system/user/index.vue b/Web/src/views/system/user/index.vue index 8a3a22da..df48b721 100644 --- a/Web/src/views/system/user/index.vue +++ b/Web/src/views/system/user/index.vue @@ -293,15 +293,11 @@ const changeStatus = (row: any) => { // 重置密码 const resetQueryPwd = async (row: any) => { - ElMessageBox.prompt( - t('message.list.confirmResetPassword', { account: row.account }), - t('message.list.resetPassword'), - { - confirmButtonText: t('message.list.confirmButtonText'), - cancelButtonText: t('message.list.cancelButtonText'), - type: 'warning', - } - ) + ElMessageBox.prompt(t('message.list.confirmResetPassword', { account: row.account }), t('message.list.resetPassword'), { + confirmButtonText: t('message.list.confirmButtonText'), + cancelButtonText: t('message.list.cancelButtonText'), + type: 'warning', + }) .then(async ({ value }) => { await getAPI(SysUserApi) .apiSysUserResetPwdPost({ id: row.id, newPassword: value })