From b17b90ac0453f9e93beb3016f098131d29c756f4 Mon Sep 17 00:00:00 2001 From: WangJunZzz <510423039@qq.com> Date: Sun, 10 Mar 2024 13:06:30 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8DIdentity=E9=94=81?= =?UTF-8?q?=E5=AE=9A=E5=8A=9F=E8=83=BD=20#124?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Users/AccountAppService.cs | 23 +++++++++++--- .../Users/UserAppService.cs | 1 + .../BasicManagementErrorCodes.cs | 9 +++--- .../Localization/BasicManagement/en.json | 3 +- .../Localization/BasicManagement/zh-Hans.json | 3 +- ...asicManagementSettingDefinitionProvider.cs | 30 ++++++++++++------- 6 files changed, 48 insertions(+), 21 deletions(-) diff --git a/aspnet-core/modules/BasicManagement/src/Lion.AbpPro.BasicManagement.Application/Users/AccountAppService.cs b/aspnet-core/modules/BasicManagement/src/Lion.AbpPro.BasicManagement.Application/Users/AccountAppService.cs index e0d138cfa..79a71eeae 100644 --- a/aspnet-core/modules/BasicManagement/src/Lion.AbpPro.BasicManagement.Application/Users/AccountAppService.cs +++ b/aspnet-core/modules/BasicManagement/src/Lion.AbpPro.BasicManagement.Application/Users/AccountAppService.cs @@ -5,39 +5,53 @@ using Lion.AbpPro.BasicManagement.ConfigurationOptions; using Lion.AbpPro.BasicManagement.Users.Dtos; using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Identity; using Microsoft.IdentityModel.Tokens; using Volo.Abp.Identity.AspNetCore; using Volo.Abp.Security.Claims; +using IdentityUser = Volo.Abp.Identity.IdentityUser; namespace Lion.AbpPro.BasicManagement.Users { public class AccountAppService : BasicManagementAppService, IAccountAppService { private readonly IdentityUserManager _userManager; + private readonly JwtOptions _jwtOptions; + //private readonly Microsoft.AspNetCore.Identity.SignInManager _signInManager; private readonly IdentitySecurityLogManager _identitySecurityLogManager; private readonly IHttpContextAccessor _httpContextAccessor; private readonly AbpSignInManager _signInManager; + protected IOptions IdentityOptions { get; } + public AccountAppService( IdentityUserManager userManager, IOptionsSnapshot jwtOptions, - IdentitySecurityLogManager identitySecurityLogManager, - IHttpContextAccessor httpContextAccessor, AbpSignInManager signInManager) + IdentitySecurityLogManager identitySecurityLogManager, + IHttpContextAccessor httpContextAccessor, AbpSignInManager signInManager, ISettingProvider settingProvider, IOptions identityOptions) { _userManager = userManager; _jwtOptions = jwtOptions.Value; _identitySecurityLogManager = identitySecurityLogManager; _httpContextAccessor = httpContextAccessor; _signInManager = signInManager; + IdentityOptions = identityOptions; } public virtual async Task LoginAsync(LoginInput input) { + await IdentityOptions.SetAsync(); + var result = await _signInManager.PasswordSignInAsync(input.Name, input.Password, false, true); if (result.IsNotAllowed) + { + throw new BusinessException(BasicManagementErrorCodes.UserDisabled); + } + + if (result.IsLockedOut) { throw new BusinessException(BasicManagementErrorCodes.UserLockedOut); } @@ -47,8 +61,9 @@ public virtual async Task LoginAsync(LoginInput input) throw new BusinessException(BasicManagementErrorCodes.UserOrPasswordMismatch); } + var user = await _userManager.FindByNameAsync(input.Name); - + await _identitySecurityLogManager.SaveAsync(new IdentitySecurityLogContext() { Action = _httpContextAccessor.HttpContext?.Request.Path, @@ -104,7 +119,7 @@ private string GenerateJwt(Guid userId, string userName, string name, string ema { Subject = new ClaimsIdentity(claims), Expires = expirationTime, // token 过期时间 - NotBefore = dateNow, // token 签发时间 + NotBefore = dateNow, // token 签发时间 SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature) }; diff --git a/aspnet-core/modules/BasicManagement/src/Lion.AbpPro.BasicManagement.Application/Users/UserAppService.cs b/aspnet-core/modules/BasicManagement/src/Lion.AbpPro.BasicManagement.Application/Users/UserAppService.cs index 73abda913..ea0a6a760 100644 --- a/aspnet-core/modules/BasicManagement/src/Lion.AbpPro.BasicManagement.Application/Users/UserAppService.cs +++ b/aspnet-core/modules/BasicManagement/src/Lion.AbpPro.BasicManagement.Application/Users/UserAppService.cs @@ -82,6 +82,7 @@ public virtual async Task CreateAsync(IdentityUserCreateDto inp { // abp 5.0 之后新增字段,是否运行用户登录,默认设置为true input.IsActive = true; + input.LockoutEnabled = true; return await _identityUserAppService.CreateAsync(input); } diff --git a/aspnet-core/modules/BasicManagement/src/Lion.AbpPro.BasicManagement.Domain.Shared/BasicManagementErrorCodes.cs b/aspnet-core/modules/BasicManagement/src/Lion.AbpPro.BasicManagement.Domain.Shared/BasicManagementErrorCodes.cs index 0ad147877..cf050422f 100644 --- a/aspnet-core/modules/BasicManagement/src/Lion.AbpPro.BasicManagement.Domain.Shared/BasicManagementErrorCodes.cs +++ b/aspnet-core/modules/BasicManagement/src/Lion.AbpPro.BasicManagement.Domain.Shared/BasicManagementErrorCodes.cs @@ -2,7 +2,8 @@ public static class BasicManagementErrorCodes { - public const string OrganizationUnitNotExist =BasicManagementConsts.NameSpace+ ":100001"; - public const string UserLockedOut =BasicManagementConsts.NameSpace+ ":100002"; - public const string UserOrPasswordMismatch =BasicManagementConsts.NameSpace+ ":100003"; -} + public const string OrganizationUnitNotExist = BasicManagementConsts.NameSpace + ":100001"; + public const string UserLockedOut = BasicManagementConsts.NameSpace + ":100002"; + public const string UserOrPasswordMismatch = BasicManagementConsts.NameSpace + ":100003"; + public const string UserDisabled = BasicManagementConsts.NameSpace + ":100004"; +} \ No newline at end of file diff --git a/aspnet-core/modules/BasicManagement/src/Lion.AbpPro.BasicManagement.Domain.Shared/Localization/BasicManagement/en.json b/aspnet-core/modules/BasicManagement/src/Lion.AbpPro.BasicManagement.Domain.Shared/Localization/BasicManagement/en.json index 95d02dfaf..f4df74859 100644 --- a/aspnet-core/modules/BasicManagement/src/Lion.AbpPro.BasicManagement.Domain.Shared/Localization/BasicManagement/en.json +++ b/aspnet-core/modules/BasicManagement/src/Lion.AbpPro.BasicManagement.Domain.Shared/Localization/BasicManagement/en.json @@ -18,6 +18,7 @@ "Setting.Group.System": "System", "Lion.AbpPro.BasicManagement:100001": "OrganizationUnit Not Exist", "Lion.AbpPro.BasicManagement:100002": "UserLockedOut", - "Lion.AbpPro.BasicManagement:100003": "UserOrPasswordMismatch" + "Lion.AbpPro.BasicManagement:100003": "UserOrPasswordMismatch", + "Lion.AbpPro.BasicManagement:100004": "UserDisabled" } } \ No newline at end of file diff --git a/aspnet-core/modules/BasicManagement/src/Lion.AbpPro.BasicManagement.Domain.Shared/Localization/BasicManagement/zh-Hans.json b/aspnet-core/modules/BasicManagement/src/Lion.AbpPro.BasicManagement.Domain.Shared/Localization/BasicManagement/zh-Hans.json index 8b3389f7f..a1c960f4a 100644 --- a/aspnet-core/modules/BasicManagement/src/Lion.AbpPro.BasicManagement.Domain.Shared/Localization/BasicManagement/zh-Hans.json +++ b/aspnet-core/modules/BasicManagement/src/Lion.AbpPro.BasicManagement.Domain.Shared/Localization/BasicManagement/zh-Hans.json @@ -19,6 +19,7 @@ "Setting.Group.System": "系统", "Lion.AbpPro.BasicManagement:100001": "组织机构不存在", "Lion.AbpPro.BasicManagement:100002": "用户被锁定", - "Lion.AbpPro.BasicManagement:100003": "用户名或者密码错误" + "Lion.AbpPro.BasicManagement:100003": "用户名或者密码错误", + "Lion.AbpPro.BasicManagement:100004": "用户已禁用" } } \ No newline at end of file diff --git a/aspnet-core/modules/BasicManagement/src/Lion.AbpPro.BasicManagement.Domain/Settings/BasicManagementSettingDefinitionProvider.cs b/aspnet-core/modules/BasicManagement/src/Lion.AbpPro.BasicManagement.Domain/Settings/BasicManagementSettingDefinitionProvider.cs index 5c0a652e4..457affd61 100644 --- a/aspnet-core/modules/BasicManagement/src/Lion.AbpPro.BasicManagement.Domain/Settings/BasicManagementSettingDefinitionProvider.cs +++ b/aspnet-core/modules/BasicManagement/src/Lion.AbpPro.BasicManagement.Domain/Settings/BasicManagementSettingDefinitionProvider.cs @@ -1,4 +1,6 @@ -namespace Lion.AbpPro.BasicManagement.Settings; +using Volo.Abp.Identity.Settings; + +namespace Lion.AbpPro.BasicManagement.Settings; public class BasicManagementSettingDefinitionProvider : SettingDefinitionProvider { @@ -24,47 +26,53 @@ private static void OverrideDefaultSettings(ISettingDefinitionContext context) .WithProperty(AbpProSettingConsts.ControlType.Default, AbpProSettingConsts.ControlType.TypeText)); - context.GetOrNull("Abp.Identity.Password.RequiredLength") + context.GetOrNull(IdentitySettingNames.Password.RequiredLength) .WithProperty(BasicManagementSettings.Group.Default, BasicManagementSettings.Group.SystemManagement) .WithProperty(AbpProSettingConsts.ControlType.Default, AbpProSettingConsts.ControlType.Number); - context.GetOrNull("Abp.Identity.Password.RequiredLength") + context.GetOrNull(IdentitySettingNames.Password.RequiredUniqueChars) .WithProperty(BasicManagementSettings.Group.Default, BasicManagementSettings.Group.SystemManagement) .WithProperty(AbpProSettingConsts.ControlType.Default, AbpProSettingConsts.ControlType.Number); - context.GetOrNull("Abp.Identity.Password.RequiredUniqueChars") + context.GetOrNull(IdentitySettingNames.Password.RequireNonAlphanumeric) .WithProperty(BasicManagementSettings.Group.Default, BasicManagementSettings.Group.SystemManagement) .WithProperty(AbpProSettingConsts.ControlType.Default, - AbpProSettingConsts.ControlType.Number); + AbpProSettingConsts.ControlType.TypeCheckBox); - context.GetOrNull("Abp.Identity.Password.RequireNonAlphanumeric") + context.GetOrNull(IdentitySettingNames.Password.RequireLowercase) .WithProperty(BasicManagementSettings.Group.Default, BasicManagementSettings.Group.SystemManagement) .WithProperty(AbpProSettingConsts.ControlType.Default, AbpProSettingConsts.ControlType.TypeCheckBox); - context.GetOrNull("Abp.Identity.Password.RequireLowercase") + context.GetOrNull(IdentitySettingNames.Password.RequireUppercase) .WithProperty(BasicManagementSettings.Group.Default, BasicManagementSettings.Group.SystemManagement) .WithProperty(AbpProSettingConsts.ControlType.Default, AbpProSettingConsts.ControlType.TypeCheckBox); - context.GetOrNull("Abp.Identity.Password.RequireUppercase") + context.GetOrNull(IdentitySettingNames.Password.RequireDigit) .WithProperty(BasicManagementSettings.Group.Default, BasicManagementSettings.Group.SystemManagement) .WithProperty(AbpProSettingConsts.ControlType.Default, AbpProSettingConsts.ControlType.TypeCheckBox); - - context.GetOrNull("Abp.Identity.Password.RequireDigit") + + context.GetOrNull(IdentitySettingNames.Lockout.LockoutDuration) .WithProperty(BasicManagementSettings.Group.Default, BasicManagementSettings.Group.SystemManagement) .WithProperty(AbpProSettingConsts.ControlType.Default, - AbpProSettingConsts.ControlType.TypeCheckBox); + AbpProSettingConsts.ControlType.Number); + + context.GetOrNull(IdentitySettingNames.Lockout.MaxFailedAccessAttempts) + .WithProperty(BasicManagementSettings.Group.Default, + BasicManagementSettings.Group.SystemManagement) + .WithProperty(AbpProSettingConsts.ControlType.Default, + AbpProSettingConsts.ControlType.Number); }