Przeglądaj źródła

revert! feat: 将登录验证码/二次验证交由各租户隔离管理

喵你个旺呀 1 rok temu
rodzic
commit
45b3c0cb75

+ 10 - 0
Admin.NET/Admin.NET.Core/Const/ConfigConst.cs

@@ -46,6 +46,16 @@ public class ConfigConst
     /// </summary>
     public const string SysHideTenantLogin = "sys_hide_tenant_login";
 
+    /// <summary>
+    /// 登录二次验证
+    /// </summary>
+    public const string SysSecondVer = "sys_second_ver";
+
+    /// <summary>
+    /// 图形验证码
+    /// </summary>
+    public const string SysCaptcha = "sys_captcha";
+
     /// <summary>
     /// Token过期时间
     /// </summary>

+ 0 - 12
Admin.NET/Admin.NET.Core/Entity/SysTenant.cs

@@ -85,18 +85,6 @@ public partial class SysTenant : EntityBase
     [SugarColumn(ColumnDescription = "默认注册方案")]
     public virtual long? RegWayId { get; set; }
 
-    /// <summary>
-    /// 启用验证码
-    /// </summary>
-    [SugarColumn(ColumnDescription = "启用验证码")]
-    public virtual YesNoEnum? Captcha { get; set; } = YesNoEnum.Y;
-
-    /// <summary>
-    /// 启用二次验证
-    /// </summary>
-    [SugarColumn(ColumnDescription = "启用二次验证")]
-    public virtual YesNoEnum? SecondVer { get; set; } = YesNoEnum.N;
-
     /// <summary>
     /// 图标
     /// </summary>

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

@@ -25,7 +25,9 @@ public class SysConfigSeedData : ISqlSugarEntitySeedData<SysConfig>
             new SysConfig{ Id=1300000000131, Name="日志保留天数", Code=ConfigConst.SysLogRetentionDays, Value="180", SysFlag=YesNoEnum.Y, Remark="日志保留天数(天)", OrderNo=40, GroupCode=ConfigConst.SysDefaultGroup, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
             new SysConfig{ Id=1300000000141, Name="记录操作日志", Code=ConfigConst.SysOpLog, Value="True", SysFlag=YesNoEnum.Y, Remark="是否记录操作日志", OrderNo=50, GroupCode=ConfigConst.SysDefaultGroup, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
             new SysConfig{ Id=1300000000151, Name="单设备登录", Code=ConfigConst.SysSingleLogin, Value="False", SysFlag=YesNoEnum.Y, Remark="是否开启单设备登录", OrderNo=60, GroupCode=ConfigConst.SysDefaultGroup, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
-            new SysConfig{ Id=1300000000161, Name="登录时隐藏租户选择器", Code=ConfigConst.SysHideTenantLogin, Value="False", SysFlag=YesNoEnum.Y, Remark="登录时隐藏租户选择器", OrderNo=60, GroupCode=ConfigConst.SysDefaultGroup, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
+            new SysConfig{ Id=1300000000161, Name="登录二次验证", Code=ConfigConst.SysSecondVer, Value="False", SysFlag=YesNoEnum.Y, Remark="是否开启登录二次验证", OrderNo=70, GroupCode=ConfigConst.SysWebConfigGroup, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
+            new SysConfig{ Id=1300000000171, Name="图形验证码", Code=ConfigConst.SysCaptcha, Value="True", SysFlag=YesNoEnum.Y, Remark="是否开启图形验证码", OrderNo=80, GroupCode=ConfigConst.SysWebConfigGroup, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
+            new SysConfig{ Id=1300000000172, Name="登录时隐藏租户选择器", Code=ConfigConst.SysHideTenantLogin, Value="False", SysFlag=YesNoEnum.Y, Remark="登录时隐藏租户选择器", OrderNo=60, GroupCode=ConfigConst.SysDefaultGroup, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
             new SysConfig{ Id=1300000000181, Name="Token过期时间", Code=ConfigConst.SysTokenExpire, Value="10080", SysFlag=YesNoEnum.Y, Remark="Token过期时间(分钟)", OrderNo=90, GroupCode=ConfigConst.SysDefaultGroup, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
             new SysConfig{ Id=1300000000191, Name="RefreshToken过期时间", Code=ConfigConst.SysRefreshTokenExpire, Value="20160", SysFlag=YesNoEnum.Y, Remark="刷新Token过期时间(分钟)(一般 refresh_token 的有效时间 > 2 * access_token 的有效时间)", OrderNo=100, GroupCode=ConfigConst.SysDefaultGroup, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
             new SysConfig{ Id=1300000000201, Name="发送异常日志邮件", Code=ConfigConst.SysErrorMail, Value="False", SysFlag=YesNoEnum.Y, Remark="是否发送异常日志邮件", OrderNo=110, GroupCode=ConfigConst.SysDefaultGroup, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },

+ 7 - 19
Admin.NET/Admin.NET.Core/Service/Auth/SysAuthService.cs

@@ -62,6 +62,9 @@ public class SysAuthService : IDynamicApiController, ITransient
         if (passwordMaxErrorTimes < 1) passwordMaxErrorTimes = 10;
         if (passwordErrorTimes > passwordMaxErrorTimes) throw Oops.Oh(ErrorCodeEnum.D1027);
 
+        // 判断是否开启验证码,其校验验证码
+        if (await _sysConfigService.GetConfigValue<bool>(ConfigConst.SysCaptcha) && !_captcha.Validate(input.CodeId.ToString(), input.Code)) throw Oops.Oh(ErrorCodeEnum.D0008);
+
         // 获取登录租户和用户
         var (tenant, user) = await GetLoginUserAndTenant(input.TenantId, codeId: input.CodeId, code: input.Code, account: input.Account);
 
@@ -105,12 +108,9 @@ public class SysAuthService : IDynamicApiController, ITransient
     {
         // 如果租户为空,使用默认租户
         tenantId ??= SqlSugarConst.DefaultTenantId;
-        var tenant = await _sysUserRep.ChangeRepository<SqlSugarRepository<SysTenant>>().GetFirstAsync(u => u.Id == tenantId);
-
-        // 校验验证码
-        if (tenant?.Captcha == YesNoEnum.Y && !_captcha.Validate(codeId.ToString(), code)) throw Oops.Oh(ErrorCodeEnum.D0008);
 
         // 租户是否存在或已禁用
+        var tenant = await _sysUserRep.ChangeRepository<SqlSugarRepository<SysTenant>>().GetFirstAsync(u => u.Id == tenantId);
         if (tenant?.Status != StatusEnum.Enable) throw Oops.Oh(ErrorCodeEnum.Z1003);
         
         // 判断账号是否存在
@@ -412,12 +412,7 @@ public class SysAuthService : IDynamicApiController, ITransient
             : long.Parse(tenantIdStr);
         try
         {
-            // 关闭验证码验证
-            await _sysUserRep.Context
-                .Updateable(new SysTenant { Captcha = YesNoEnum.N })
-                .UpdateColumns(u => u.Captcha)
-                .Where(u => u.Id == tenantId)
-                .ExecuteCommandAsync();
+            _sysCacheService.Set($"{CacheConst.KeyConfig}{ConfigConst.SysCaptcha}", false);
 
             await Login(new LoginInput
             {
@@ -426,20 +421,13 @@ public class SysAuthService : IDynamicApiController, ITransient
                 TenantId = tenantId
             });
 
+            _sysCacheService.Remove($"{CacheConst.KeyConfig}{ConfigConst.SysCaptcha}");
+
             return 200;
         }
         catch (Exception)
         {
             return 401;
         }
-        finally
-        {
-            // 开启验证码验证
-            await _sysUserRep.Context
-                .Updateable(new SysTenant { Captcha = YesNoEnum.N })
-                .UpdateColumns(u => u.Captcha)
-                .Where(u => u.Id == tenantId)
-                .ExecuteCommandAsync();
-        }
     }
 }

+ 6 - 2
Admin.NET/Admin.NET.Core/Service/Config/SysConfigService.cs

@@ -252,6 +252,8 @@ public class SysConfigService : IDynamicApiController, ITransient
             .Select(u => new { Label = u.Name, Value = u.Id })
             .ToListAsync();
 
+        var captcha = await GetConfigValue<bool>(ConfigConst.SysCaptcha);
+        var secondVer = await GetConfigValue<bool>(ConfigConst.SysSecondVer);
         var hideTenantForLogin = await GetConfigValue<bool>(ConfigConst.SysHideTenantLogin);
         return new
         {
@@ -265,8 +267,8 @@ public class SysConfigService : IDynamicApiController, ITransient
             tenant.IcpUrl,
             tenant.RegWayId,
             tenant.EnableReg,
-            tenant.SecondVer,
-            tenant.Captcha,
+            SecondVer = secondVer,
+            Captcha = captcha,
             WayList = wayList,
             HideTenantForLogin = hideTenantForLogin
         };
@@ -282,6 +284,8 @@ public class SysConfigService : IDynamicApiController, ITransient
     {
         var tenant = await App.GetService<SysTenantService>().GetCurrentTenant() ?? throw Oops.Oh(ErrorCodeEnum.D1002);
         if (!string.IsNullOrEmpty(input.LogoBase64)) App.GetService<SysTenantService>().SetLogoUrl(tenant, input.LogoBase64, input.LogoFileName);
+        await UpdateConfigValue(ConfigConst.SysCaptcha, (input.Captcha == YesNoEnum.Y).ToString());
+        await UpdateConfigValue(ConfigConst.SysSecondVer, (input.SecondVer == YesNoEnum.Y).ToString());
 
         tenant.Copy(input);
         tenant.RegWayId = input.EnableReg == YesNoEnum.Y ? input.RegWayId : null;

+ 3 - 5
Admin.NET/Plugins/Admin.NET.Plugin.GoView/Service/GoViewSys/GoViewSysService.cs

@@ -35,19 +35,17 @@ public class GoViewSysService : IDynamicApiController
     [DisplayName("GoView 登录")]
     public async Task<GoViewLoginOutput> Login(GoViewLoginInput input)
     {
-        // 关闭验证码验证
-        var tenant = await _sysUserRep.Context.Queryable<SysTenant>().FirstAsync(u => u.Id == input.TenantId) ?? throw Oops.Oh(ErrorCodeEnum.Z1003);
-        if (tenant.Captcha == YesNoEnum.Y) await _sysUserRep.Context.Updateable(new SysTenant{ Captcha = YesNoEnum.N }).UpdateColumns(u => u.Captcha).ExecuteCommandAsync();
+        _sysCacheService.Set($"{CacheConst.KeyConfig}{ConfigConst.SysCaptcha}", false);
 
         input.Password = CryptogramUtil.SM2Encrypt(input.Password);
         var loginResult = await _sysAuthService.Login(new LoginInput()
         {
             Account = input.Username,
             Password = input.Password,
+            TenantId = input.TenantId
         });
 
-        // 启用验证码
-        if (tenant.Captcha == YesNoEnum.Y) await _sysUserRep.Context.Updateable(new SysTenant{ Captcha = YesNoEnum.Y }).UpdateColumns(u => u.Captcha).ExecuteCommandAsync();
+        _sysCacheService.Remove($"{CacheConst.KeyConfig}{ConfigConst.SysCaptcha}");
 
         var sysUser = await _sysUserRep.AsQueryable().ClearFilter().FirstAsync(u => u.Account.Equals(input.Username));
         return new GoViewLoginOutput()

+ 2 - 2
Web/src/App.vue

@@ -134,8 +134,8 @@ const loadSysInfo = () => {
 			// 版权说明
 			themeConfig.value.copyright = data.copyright;
 			// 登录验证
-			themeConfig.value.secondVer = data.secondVer == 1;
-			themeConfig.value.captcha = data.captcha == 1;
+			themeConfig.value.secondVer = data.secondVer;
+			themeConfig.value.captcha = data.captcha;
 			// 登陆时隐藏租户
 			themeConfig.value.hideTenantForLogin = data.hideTenantForLogin;
 			// 注册功能

+ 22 - 22
Web/src/views/system/tenant/component/editTenant.vue

@@ -147,28 +147,28 @@
 							</el-col>
 						</el-row>
 					</el-tab-pane>
-					<el-tab-pane label="配置开关" style="height: 550px; overflow: auto; overflow-x: hidden;">
-						<el-row :gutter="35">
-							<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
-								<el-form-item label="启用验证码" prop="captcha">
-									<el-switch
-											v-model="state.ruleForm.captcha"
-											:active-value="1"
-											:inactive-value="2"
-									/>
-								</el-form-item>
-							</el-col>
-							<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
-								<el-form-item label="启用二次验证" prop="secondVer">
-									<el-switch
-											v-model="state.ruleForm.secondVer"
-											:active-value="1"
-											:inactive-value="2"
-									/>
-								</el-form-item>
-							</el-col>
-						</el-row>
-					</el-tab-pane>
+<!--					<el-tab-pane label="配置开关" style="height: 550px; overflow: auto; overflow-x: hidden;">-->
+<!--						<el-row :gutter="35">-->
+<!--							<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">-->
+<!--								<el-form-item label="启用验证码" prop="captcha">-->
+<!--									<el-switch-->
+<!--											v-model="state.ruleForm.captcha"-->
+<!--											:active-value="1"-->
+<!--											:inactive-value="2"-->
+<!--									/>-->
+<!--								</el-form-item>-->
+<!--							</el-col>-->
+<!--							<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">-->
+<!--								<el-form-item label="启用二次验证" prop="secondVer">-->
+<!--									<el-switch-->
+<!--											v-model="state.ruleForm.secondVer"-->
+<!--											:active-value="1"-->
+<!--											:inactive-value="2"-->
+<!--									/>-->
+<!--								</el-form-item>-->
+<!--							</el-col>-->
+<!--						</el-row>-->
+<!--					</el-tab-pane>-->
 				</el-tabs>
 			</el-form>
 			<template #footer>

+ 0 - 10
Web/src/views/system/tenant/index.vue

@@ -43,16 +43,6 @@
 						<g-sys-dict v-model="scope.row.enableReg" code="YesNoEnum" />
 					</template>
 				</el-table-column>
-				<el-table-column prop="captcha" label="启用验证码" width="280" show-overflow-tooltip>
-					<template #default="scope">
-						<g-sys-dict v-model="scope.row.captcha" code="YesNoEnum" />
-					</template>
-				</el-table-column>
-				<el-table-column prop="secondVer" label="启用二次验证" width="280" show-overflow-tooltip>
-					<template #default="scope">
-						<g-sys-dict v-model="scope.row.secondVer" code="YesNoEnum" />
-					</template>
-				</el-table-column>
 				<el-table-column prop="adminAccount" label="租管账号" align="center" width="120" show-overflow-tooltip />
 				<el-table-column prop="phone" label="电话" width="120" align="center" show-overflow-tooltip />
 				<el-table-column prop="host" label="域名" width="150" show-overflow-tooltip />