zuohuaijun пре 2 година
родитељ
комит
55895961ea

+ 1 - 1
Admin.NET/Admin.NET.Core/Const/CacheConst.cs

@@ -44,7 +44,7 @@ public class CacheConst
     /// <summary>
     /// 密码错误次数缓存
     /// </summary>
-    public const string KeyErrorPasswordCount = "sys_errorPasswordCount:";
+    public const string KeyPasswordErrorTimes = "sys_password_error_times:";
 
     /// <summary>
     /// 租户缓存

+ 1 - 1
Admin.NET/Admin.NET.Core/Const/CommonConst.cs

@@ -25,7 +25,7 @@ public class CommonConst
     /// <summary>
     /// 密码最大错误次数
     /// </summary>
-    public const string SysMaxPasswdErrTimes = "sys_max_passwd_err_times";
+    public const string SysPasswdMaxErrorTimes = "sys_passwd_max_error_times";
 
     /// <summary>
     /// 登录二次验证

+ 3 - 4
Admin.NET/Admin.NET.Core/Extension/HttpContextExtension.cs

@@ -15,7 +15,7 @@ namespace Admin.NET.Core;
 public static partial class HttpContextExtension
 {
     /// <summary>
-    /// 获取客户端真实IP地址
+    /// 获取客户端真实 IP 地址
     /// </summary>
     /// <returns>bool</returns>
     public static string GetRemoteIp(this HttpContext httpContext)
@@ -23,14 +23,13 @@ public static partial class HttpContextExtension
         var ip = string.Empty;
         try
         {
-            // 尝试从X-Forwarded-For头获取
+            // 从 X-Forwarded-For 头获取 IP
             ip = httpContext.Request.Headers["X-Forwarded-For"];
             if (string.IsNullOrEmpty(ip))
             {
-                // 直接从连接获取
                 ip = httpContext.GetRemoteIpAddressToIPv4();
             }
-            // 验证IP地址有效性
+            // 验证 IP 地址有效性
             if (!IPAddress.TryParse(ip, out _))
             {
                 ip = null;

+ 1 - 1
Admin.NET/Admin.NET.Core/SeedData/SysConfigSeedData.cs

@@ -21,7 +21,7 @@ public class SysConfigSeedData : ISqlSugarEntitySeedData<SysConfig>
         {
             new SysConfig{ Id=1300000000101, Name="演示环境", Code="sys_demo", Value="False", SysFlag=YesNoEnum.Y, Remark="演示环境", OrderNo=10, GroupCode="Default", CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
             new SysConfig{ Id=1300000000111, Name="默认密码", Code="sys_password", Value="123456", SysFlag=YesNoEnum.Y, Remark="默认密码", OrderNo=20, GroupCode="Default", CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
-            new SysConfig{ Id=1300000000121, Name="密码最大错误次数", Code="sys_max_passwd_err_times", Value="5", SysFlag=YesNoEnum.Y, Remark="允许密码最大输入错误次数", OrderNo=30, GroupCode="Default", CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
+            new SysConfig{ Id=1300000000121, Name="密码最大错误次数", Code="sys_passwd_max_error_times", Value="5", SysFlag=YesNoEnum.Y, Remark="允许密码最大输入错误次数", OrderNo=30, GroupCode="Default", CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
             new SysConfig{ Id=1300000000131, Name="记录操作日志", Code="sys_oplog", Value="True", SysFlag=YesNoEnum.Y, Remark="是否记录操作日志", OrderNo=40, GroupCode="Default", CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
             new SysConfig{ Id=1300000000141, Name="开启单设备登录", Code="sys_single_login", Value="False", SysFlag=YesNoEnum.Y, Remark="是否开启单设备登录", OrderNo=50, GroupCode="Default", CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
             new SysConfig{ Id=1300000000151, Name="开启登录二次验证", Code="sys_second_ver", Value="False", SysFlag=YesNoEnum.Y, Remark="是否开启登录二次验证", OrderNo=60, GroupCode="Default", CreateTime=DateTime.Parse("2022-02-10 00:00:00") },

+ 13 - 13
Admin.NET/Admin.NET.Core/Service/Auth/SysAuthService.cs

@@ -63,10 +63,10 @@ public class SysAuthService : IDynamicApiController, ITransient
         //var host = _httpContextAccessor.HttpContext.Request.Host;
 
         // 判断密码错误次数(缓存30分钟)
-        var keyErrorPasswordCount = $"{CacheConst.KeyErrorPasswordCount}{input.Account}";
-        var errorPasswordCount = _sysCacheService.Get<int>(keyErrorPasswordCount);
-        var maxPasswdErrTimes = await _sysConfigService.GetConfigValue<int>(CommonConst.SysMaxPasswdErrTimes);
-        if (errorPasswordCount >= maxPasswdErrTimes)
+        var keyPasswordErrorTimes = $"{CacheConst.KeyPasswordErrorTimes}{input.Account}";
+        var passwordErrorTimes = _sysCacheService.Get<int>(keyPasswordErrorTimes);
+        var passwdMaxErrorTimes = await _sysConfigService.GetConfigValue<int>(CommonConst.SysPasswdMaxErrorTimes);
+        if (passwordErrorTimes >= passwdMaxErrorTimes)
             throw Oops.Oh(ErrorCodeEnum.D1027);
 
         // 是否开启验证码
@@ -106,19 +106,19 @@ public class SysAuthService : IDynamicApiController, ITransient
             var userLdap = await _sysUserLdap.GetFirstAsync(u => u.UserId == user.Id && u.TenantId == tenant.Id);
             if (userLdap == null)
             {
-                VerifyPassword(input, keyErrorPasswordCount, errorPasswordCount, user);
+                VerifyPassword(input, keyPasswordErrorTimes, passwordErrorTimes, user);
             }
             else if (!await _sysLdapService.AuthAccount(tenant.Id, userLdap.Account, input.Password))
             {
-                _sysCacheService.Set(keyErrorPasswordCount, ++errorPasswordCount, TimeSpan.FromMinutes(30));
+                _sysCacheService.Set(keyPasswordErrorTimes, ++passwordErrorTimes, TimeSpan.FromMinutes(30));
                 throw Oops.Oh(ErrorCodeEnum.D1000);
             }
         }
         else
-            VerifyPassword(input, keyErrorPasswordCount, errorPasswordCount, user);
+            VerifyPassword(input, keyPasswordErrorTimes, passwordErrorTimes, user);
 
         // 登录成功则清空密码错误次数
-        _sysCacheService.Remove(keyErrorPasswordCount);
+        _sysCacheService.Remove(keyPasswordErrorTimes);
 
         return await CreateToken(user);
     }
@@ -127,16 +127,16 @@ public class SysAuthService : IDynamicApiController, ITransient
     /// 验证用户密码
     /// </summary>
     /// <param name="input"></param>
-    /// <param name="keyErrorPasswordCount"></param>
-    /// <param name="errorPasswordCount"></param>
+    /// <param name="keyPasswordErrorTims"></param>
+    /// <param name="passwordErrorTimes"></param>
     /// <param name="user"></param>
-    private void VerifyPassword(LoginInput input, string keyErrorPasswordCount, int errorPasswordCount, SysUser user)
+    private void VerifyPassword(LoginInput input, string keyPasswordErrorTims, int passwordErrorTimes, SysUser user)
     {
         if (CryptogramUtil.CryptoType == CryptogramEnum.MD5.ToString())
         {
             if (!user.Password.Equals(MD5Encryption.Encrypt(input.Password)))
             {
-                _sysCacheService.Set(keyErrorPasswordCount, ++errorPasswordCount, TimeSpan.FromMinutes(30));
+                _sysCacheService.Set(keyPasswordErrorTims, ++passwordErrorTimes, TimeSpan.FromMinutes(30));
                 throw Oops.Oh(ErrorCodeEnum.D1000);
             }
         }
@@ -144,7 +144,7 @@ public class SysAuthService : IDynamicApiController, ITransient
         {
             if (!CryptogramUtil.Decrypt(user.Password).Equals(input.Password))
             {
-                _sysCacheService.Set(keyErrorPasswordCount, ++errorPasswordCount, TimeSpan.FromMinutes(30));
+                _sysCacheService.Set(keyPasswordErrorTims, ++passwordErrorTimes, TimeSpan.FromMinutes(30));
                 throw Oops.Oh(ErrorCodeEnum.D1000);
             }
         }

+ 3 - 3
Admin.NET/Admin.NET.Core/Service/Config/SysConfigService.cs

@@ -252,8 +252,8 @@ public class SysConfigService : IDynamicApiController, ITransient
         var sysIcp = await GetConfigValue<string>("sys_web_icp");
         var sysIcpUrl = await GetConfigValue<string>("sys_web_icpUrl");
 
-        string ip = _httpContextAccessor.HttpContext.GetRemoteIp();
-        string watermark = $"{sysWatermark}-{DateTime.Now}-{ip}-{_userManager.RealName}";
+        //var ip = _httpContextAccessor.HttpContext.GetRemoteIp();
+        //var watermark = $"{sysWatermark}-{DateTime.Now}-{ip}-{_userManager.RealName}";
 
         return new
         {
@@ -261,7 +261,7 @@ public class SysConfigService : IDynamicApiController, ITransient
             SysTitle = sysTitle,
             SysViceTitle = sysViceTitle,
             SysViceDesc = sysViceDesc,
-            SysWatermark = watermark,
+            SysWatermark = sysWatermark,
             SysCopyright = sysCopyright,
             SysIcp = sysIcp,
             SysIcpUrl = sysIcpUrl

+ 3 - 3
Admin.NET/Admin.NET.Core/Service/User/SysUserService.cs

@@ -315,7 +315,7 @@ public class SysUserService : IDynamicApiController, ITransient
         await _sysUserRep.AsUpdateable(user).UpdateColumns(u => u.Password).ExecuteCommandAsync();
 
         // 清空密码错误次数
-        var keyErrorPasswordCount = $"{CacheConst.KeyErrorPasswordCount}{user.Account}";
+        var keyErrorPasswordCount = $"{CacheConst.KeyPasswordErrorTimes}{user.Account}";
         _sysCacheService.Remove(keyErrorPasswordCount);
 
         return password;
@@ -332,8 +332,8 @@ public class SysUserService : IDynamicApiController, ITransient
         var user = await _sysUserRep.GetFirstAsync(u => u.Id == input.Id) ?? throw Oops.Oh(ErrorCodeEnum.D0009);
 
         // 清空密码错误次数
-        var keyErrorPasswordCount = $"{CacheConst.KeyErrorPasswordCount}{user.Account}";
-        _sysCacheService.Remove(keyErrorPasswordCount);
+        var keyPasswordErrorTimes = $"{CacheConst.KeyPasswordErrorTimes}{user.Account}";
+        _sysCacheService.Remove(keyPasswordErrorTimes);
     }
 
     /// <summary>

+ 3 - 3
Web/package.json

@@ -2,7 +2,7 @@
 	"name": "admin.net",
 	"type": "module",
 	"version": "2.4.33",
-	"lastBuildTime": "2024.6.16",
+	"lastBuildTime": "2024.6.25",
 	"description": "Admin.NET 站在巨人肩膀上的 .NET 通用权限开发框架",
 	"author": "zuohuaijun",
 	"license": "MIT",
@@ -70,8 +70,8 @@
 		"@types/node": "^20.14.8",
 		"@types/nprogress": "^0.2.3",
 		"@types/sortablejs": "^1.15.8",
-		"@typescript-eslint/eslint-plugin": "^7.13.1",
-		"@typescript-eslint/parser": "^7.13.1",
+		"@typescript-eslint/eslint-plugin": "^7.14.0",
+		"@typescript-eslint/parser": "^7.14.0",
 		"@vitejs/plugin-vue": "^5.0.5",
 		"@vitejs/plugin-vue-jsx": "^4.0.0",
 		"@vue/compiler-sfc": "^3.4.30",