异地登录修改
	
		
			
	
		
	
	
		
			
				
	
				continuous-integration/drone/push Build is passing
				
					Details
				
			
		
	
				
					
				
			
				
	
				continuous-integration/drone/push Build is passing
				
					Details
				
			
		
	
							parent
							
								
									293933ec7d
								
							
						
					
					
						commit
						3f2315c96d
					
				| 
						 | 
				
			
			@ -24,6 +24,8 @@ namespace IRaCIS.Core.Application.ViewModel
 | 
			
		|||
 | 
			
		||||
        public string TargetIdentityUserName { get; set; }
 | 
			
		||||
 | 
			
		||||
        public bool IsLoginUncommonly { get; set; }
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
        public string JsonObj { get; set; }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -60,6 +62,8 @@ namespace IRaCIS.Core.Application.ViewModel
 | 
			
		|||
 | 
			
		||||
        public Guid? IdentityUserId { get; set; }
 | 
			
		||||
 | 
			
		||||
        public bool? IsLoginUncommonly { get; set; }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -782,7 +782,6 @@ namespace IRaCIS.Core.Application.Service
 | 
			
		|||
            //检查数据库是否存在该验证码
 | 
			
		||||
            if (verificationRecord == null)
 | 
			
		||||
            {
 | 
			
		||||
                await _userLogRepository.AddAsync(new UserLog() { IP = _userInfo.IP, ActionUserName = _userInfo.UserName, TargetIdentityUserId = identityUserId, OptType = UserOptType.MFALoginFail }, true);
 | 
			
		||||
                //---验证码错误。
 | 
			
		||||
                throw new BusinessValidationFailedException(_localizer["TrialSiteSurvey_WrongVerificationCode"]);
 | 
			
		||||
            }
 | 
			
		||||
| 
						 | 
				
			
			@ -791,7 +790,6 @@ namespace IRaCIS.Core.Application.Service
 | 
			
		|||
                //检查验证码是否失效
 | 
			
		||||
                if (verificationRecord.ExpirationTime < DateTime.Now)
 | 
			
		||||
                {
 | 
			
		||||
                    await _userLogRepository.AddAsync(new UserLog() { IP = _userInfo.IP, ActionUserName = _userInfo.UserName, TargetIdentityUserId = identityUserId, OptType = UserOptType.MFALoginFail }, true);
 | 
			
		||||
                    //---验证码已经过期。
 | 
			
		||||
                    throw new BusinessValidationFailedException(_localizer["TrialSiteSurvey_ExpiredVerificationCode"]);
 | 
			
		||||
                }
 | 
			
		||||
| 
						 | 
				
			
			@ -930,6 +928,7 @@ namespace IRaCIS.Core.Application.Service
 | 
			
		|||
               .WhereIf(inQuery.OptType != null, t => t.OptType == inQuery.OptType)
 | 
			
		||||
               .WhereIf(inQuery.BeginDate != null, t => t.CreateTime >= inQuery.BeginDate)
 | 
			
		||||
               .WhereIf(inQuery.EndDate != null, t => t.CreateTime <= inQuery.EndDate)
 | 
			
		||||
                 .WhereIf(inQuery.IsLoginUncommonly != null, t => t.IsLoginUncommonly == inQuery.IsLoginUncommonly)
 | 
			
		||||
               .WhereIf(!string.IsNullOrEmpty(inQuery.LoginUserName), t => t.ActionUserName.Contains(inQuery.LoginUserName!))
 | 
			
		||||
               .WhereIf(!string.IsNullOrEmpty(inQuery.LoginFaildName), t => t.ActionUserName.Contains(inQuery.LoginFaildName!))
 | 
			
		||||
               .WhereIf(!string.IsNullOrEmpty(inQuery.IP), t => t.IP.Contains(inQuery.IP!))
 | 
			
		||||
| 
						 | 
				
			
			@ -997,9 +996,11 @@ namespace IRaCIS.Core.Application.Service
 | 
			
		|||
            await _fusionCache.SetAsync<int?>(cacheKey, failCount, TimeSpan.FromMinutes(lockoutMinutes));
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            var userLog = new UserLog();
 | 
			
		||||
 | 
			
		||||
            if (failCount >= maxFailures)
 | 
			
		||||
            {
 | 
			
		||||
                await _userLogRepository.AddAsync(new UserLog() { IP = _userInfo.IP, ActionUserName = userName, LoginPassword = password, OptType = UserOptType.AccountLocked }, true);
 | 
			
		||||
                await _userLogRepository.AddAsync(new UserLog() { IP = _userInfo.IP, ActionUserName = userName, LoginPassword = password, OptType = UserOptType.TempLockLogin }, true);
 | 
			
		||||
 | 
			
		||||
                //$"密码连续错误{maxFailures}次,当前账号已被限制登录,请等待 {lockoutMinutes} 分钟后再试。"
 | 
			
		||||
                throw new BusinessValidationFailedException(_localizer["User_ErrorLimit", maxFailures, lockoutMinutes]);
 | 
			
		||||
| 
						 | 
				
			
			@ -1025,16 +1026,11 @@ namespace IRaCIS.Core.Application.Service
 | 
			
		|||
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (loginUser.Status == 0)
 | 
			
		||||
            {
 | 
			
		||||
                await _userLogRepository.AddAsync(new UserLog() { IP = _userInfo.IP, ActionIdentityUserId = loginUser.IdentityUserId, ActionUserName = userName, OptType = UserOptType.LoginLockedAccount }, true);
 | 
			
		||||
            //登录用户是系统用户的时候,就要要记录异地登录
 | 
			
		||||
 | 
			
		||||
            #region 处理用户状态
 | 
			
		||||
 | 
			
		||||
                //---该用户已经被禁用。
 | 
			
		||||
                return ResponseOutput.NotOk(_localizer["User_Disabled"], new IRCLoginReturnDTO());
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            //登录成功  清除缓存
 | 
			
		||||
            await _fusionCache.SetAsync(cacheKey, 0, TimeSpan.FromMinutes(lockoutMinutes));
 | 
			
		||||
            var ipinfo = _searcher.Search(_userInfo.IP);
 | 
			
		||||
 | 
			
		||||
            var iPRegion = string.Join('|', ipinfo.Split('|').TakeLast(3));
 | 
			
		||||
| 
						 | 
				
			
			@ -1047,20 +1043,33 @@ namespace IRaCIS.Core.Application.Service
 | 
			
		|||
 | 
			
		||||
            if (loginUser.LastLoginIP != string.Empty)
 | 
			
		||||
            {
 | 
			
		||||
                // 与上一次IP不一致
 | 
			
		||||
                // 与上一次区域不一致
 | 
			
		||||
                if (SplitAndConcatenate(loginUser.LastLoginIP) != SplitAndConcatenate(iPRegion))
 | 
			
		||||
                {
 | 
			
		||||
                    loginUser.LoginState = 2;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            //超过90天没修改密码
 | 
			
		||||
            if (_verifyConfig.CurrentValue.IsNeedChangePassWord && loginUser.LastChangePassWordTime != null && DateTime.Now.AddDays(-_verifyConfig.CurrentValue.ChangePassWordDays) > loginUser.LastChangePassWordTime.Value)
 | 
			
		||||
            {
 | 
			
		||||
                loginUser.LoginState = 1;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            await _userLogRepository.AddAsync(new UserLog() { IP = _userInfo.IP, ActionIdentityUserId = loginUser.IdentityUserId, OptType = UserOptType.Login }, true);
 | 
			
		||||
            #endregion
 | 
			
		||||
 | 
			
		||||
            if (loginUser.Status == 0)
 | 
			
		||||
            {
 | 
			
		||||
                await _userLogRepository.AddAsync(new UserLog() { IP = _userInfo.IP, ActionIdentityUserId = loginUser.IdentityUserId, ActionUserName = userName, OptType = UserOptType.LoginLockedAccount, IsLoginUncommonly = (loginUser.LoginState == 2) }, true);
 | 
			
		||||
 | 
			
		||||
                //---该用户已经被禁用。
 | 
			
		||||
                return ResponseOutput.NotOk(_localizer["User_Disabled"], new IRCLoginReturnDTO());
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            //登录成功  清除缓存
 | 
			
		||||
            await _fusionCache.SetAsync(cacheKey, 0, TimeSpan.FromMinutes(lockoutMinutes));
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            await _userLogRepository.AddAsync(new UserLog() { IP = _userInfo.IP, ActionIdentityUserId = loginUser.IdentityUserId, OptType = UserOptType.Login, IsLoginUncommonly = (loginUser.LoginState == 2) }, true);
 | 
			
		||||
 | 
			
		||||
            userLoginReturnModel.BasicInfo = loginUser;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -48,7 +48,7 @@ public enum UserOptType
 | 
			
		|||
 | 
			
		||||
    MFALogin = 12,
 | 
			
		||||
 | 
			
		||||
    MFALoginFail = 13,
 | 
			
		||||
    TempLockLogin = 13,
 | 
			
		||||
 | 
			
		||||
    AddUser = 14
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -41,6 +41,9 @@ public class UserLog : BaseAddAuditEntity
 | 
			
		|||
 | 
			
		||||
    #endregion
 | 
			
		||||
 | 
			
		||||
    [Comment("异地登录")]
 | 
			
		||||
    public bool IsLoginUncommonly { get; set; }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    #region 后续删除
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										18548
									
								
								IRaCIS.Core.Infra.EFCore/Migrations/20250113080339_UserlogIsLoginUncommonly.Designer.cs
								
								
									generated
								
								
								
									Normal file
								
							
							
						
						
									
										18548
									
								
								IRaCIS.Core.Infra.EFCore/Migrations/20250113080339_UserlogIsLoginUncommonly.Designer.cs
								
								
									generated
								
								
								
									Normal file
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| 
						 | 
				
			
			@ -0,0 +1,30 @@
 | 
			
		|||
using Microsoft.EntityFrameworkCore.Migrations;
 | 
			
		||||
 | 
			
		||||
#nullable disable
 | 
			
		||||
 | 
			
		||||
namespace IRaCIS.Core.Infra.EFCore.Migrations
 | 
			
		||||
{
 | 
			
		||||
    /// <inheritdoc />
 | 
			
		||||
    public partial class UserlogIsLoginUncommonly : Migration
 | 
			
		||||
    {
 | 
			
		||||
        /// <inheritdoc />
 | 
			
		||||
        protected override void Up(MigrationBuilder migrationBuilder)
 | 
			
		||||
        {
 | 
			
		||||
            migrationBuilder.AddColumn<bool>(
 | 
			
		||||
                name: "IsLoginUncommonly",
 | 
			
		||||
                table: "UserLog",
 | 
			
		||||
                type: "bit",
 | 
			
		||||
                nullable: false,
 | 
			
		||||
                defaultValue: false,
 | 
			
		||||
                comment: "异地登录");
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <inheritdoc />
 | 
			
		||||
        protected override void Down(MigrationBuilder migrationBuilder)
 | 
			
		||||
        {
 | 
			
		||||
            migrationBuilder.DropColumn(
 | 
			
		||||
                name: "IsLoginUncommonly",
 | 
			
		||||
                table: "UserLog");
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -12979,6 +12979,10 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
 | 
			
		|||
                        .HasMaxLength(400)
 | 
			
		||||
                        .HasColumnType("nvarchar(400)");
 | 
			
		||||
 | 
			
		||||
                    b.Property<bool>("IsLoginUncommonly")
 | 
			
		||||
                        .HasColumnType("bit")
 | 
			
		||||
                        .HasComment("异地登录");
 | 
			
		||||
 | 
			
		||||
                    b.Property<string>("JsonObj")
 | 
			
		||||
                        .IsRequired()
 | 
			
		||||
                        .HasColumnType("nvarchar(max)");
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue