异地登录修改
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
parent
293933ec7d
commit
3f2315c96d
|
@ -24,7 +24,9 @@ namespace IRaCIS.Core.Application.ViewModel
|
||||||
|
|
||||||
public string TargetIdentityUserName { get; set; }
|
public string TargetIdentityUserName { get; set; }
|
||||||
|
|
||||||
|
public bool IsLoginUncommonly { get; set; }
|
||||||
|
|
||||||
|
|
||||||
public string JsonObj { get; set; }
|
public string JsonObj { get; set; }
|
||||||
|
|
||||||
public string IPRegion { get; set; }
|
public string IPRegion { get; set; }
|
||||||
|
@ -60,6 +62,8 @@ namespace IRaCIS.Core.Application.ViewModel
|
||||||
|
|
||||||
public Guid? IdentityUserId { get; set; }
|
public Guid? IdentityUserId { get; set; }
|
||||||
|
|
||||||
|
public bool? IsLoginUncommonly { get; set; }
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -782,7 +782,6 @@ namespace IRaCIS.Core.Application.Service
|
||||||
//检查数据库是否存在该验证码
|
//检查数据库是否存在该验证码
|
||||||
if (verificationRecord == null)
|
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"]);
|
throw new BusinessValidationFailedException(_localizer["TrialSiteSurvey_WrongVerificationCode"]);
|
||||||
}
|
}
|
||||||
|
@ -791,7 +790,6 @@ namespace IRaCIS.Core.Application.Service
|
||||||
//检查验证码是否失效
|
//检查验证码是否失效
|
||||||
if (verificationRecord.ExpirationTime < DateTime.Now)
|
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"]);
|
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.OptType != null, t => t.OptType == inQuery.OptType)
|
||||||
.WhereIf(inQuery.BeginDate != null, t => t.CreateTime >= inQuery.BeginDate)
|
.WhereIf(inQuery.BeginDate != null, t => t.CreateTime >= inQuery.BeginDate)
|
||||||
.WhereIf(inQuery.EndDate != null, t => t.CreateTime <= inQuery.EndDate)
|
.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.LoginUserName), t => t.ActionUserName.Contains(inQuery.LoginUserName!))
|
||||||
.WhereIf(!string.IsNullOrEmpty(inQuery.LoginFaildName), t => t.ActionUserName.Contains(inQuery.LoginFaildName!))
|
.WhereIf(!string.IsNullOrEmpty(inQuery.LoginFaildName), t => t.ActionUserName.Contains(inQuery.LoginFaildName!))
|
||||||
.WhereIf(!string.IsNullOrEmpty(inQuery.IP), t => t.IP.Contains(inQuery.IP!))
|
.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));
|
await _fusionCache.SetAsync<int?>(cacheKey, failCount, TimeSpan.FromMinutes(lockoutMinutes));
|
||||||
|
|
||||||
|
|
||||||
|
var userLog = new UserLog();
|
||||||
|
|
||||||
if (failCount >= maxFailures)
|
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} 分钟后再试。"
|
//$"密码连续错误{maxFailures}次,当前账号已被限制登录,请等待 {lockoutMinutes} 分钟后再试。"
|
||||||
throw new BusinessValidationFailedException(_localizer["User_ErrorLimit", 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 ipinfo = _searcher.Search(_userInfo.IP);
|
||||||
|
|
||||||
var iPRegion = string.Join('|', ipinfo.Split('|').TakeLast(3));
|
var iPRegion = string.Join('|', ipinfo.Split('|').TakeLast(3));
|
||||||
|
@ -1047,20 +1043,33 @@ namespace IRaCIS.Core.Application.Service
|
||||||
|
|
||||||
if (loginUser.LastLoginIP != string.Empty)
|
if (loginUser.LastLoginIP != string.Empty)
|
||||||
{
|
{
|
||||||
// 与上一次IP不一致
|
// 与上一次区域不一致
|
||||||
if (SplitAndConcatenate(loginUser.LastLoginIP) !=SplitAndConcatenate(iPRegion))
|
if (SplitAndConcatenate(loginUser.LastLoginIP) != SplitAndConcatenate(iPRegion))
|
||||||
{
|
{
|
||||||
loginUser.LoginState = 2;
|
loginUser.LoginState = 2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//超过90天没修改密码
|
//超过90天没修改密码
|
||||||
if (_verifyConfig.CurrentValue.IsNeedChangePassWord && loginUser.LastChangePassWordTime != null && DateTime.Now.AddDays(-_verifyConfig.CurrentValue.ChangePassWordDays) > loginUser.LastChangePassWordTime.Value)
|
if (_verifyConfig.CurrentValue.IsNeedChangePassWord && loginUser.LastChangePassWordTime != null && DateTime.Now.AddDays(-_verifyConfig.CurrentValue.ChangePassWordDays) > loginUser.LastChangePassWordTime.Value)
|
||||||
{
|
{
|
||||||
loginUser.LoginState = 1;
|
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;
|
userLoginReturnModel.BasicInfo = loginUser;
|
||||||
|
|
||||||
|
|
|
@ -48,7 +48,7 @@ public enum UserOptType
|
||||||
|
|
||||||
MFALogin = 12,
|
MFALogin = 12,
|
||||||
|
|
||||||
MFALoginFail = 13,
|
TempLockLogin = 13,
|
||||||
|
|
||||||
AddUser = 14
|
AddUser = 14
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,6 +41,9 @@ public class UserLog : BaseAddAuditEntity
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
[Comment("异地登录")]
|
||||||
|
public bool IsLoginUncommonly { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#region 后续删除
|
#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)
|
.HasMaxLength(400)
|
||||||
.HasColumnType("nvarchar(400)");
|
.HasColumnType("nvarchar(400)");
|
||||||
|
|
||||||
|
b.Property<bool>("IsLoginUncommonly")
|
||||||
|
.HasColumnType("bit")
|
||||||
|
.HasComment("异地登录");
|
||||||
|
|
||||||
b.Property<string>("JsonObj")
|
b.Property<string>("JsonObj")
|
||||||
.IsRequired()
|
.IsRequired()
|
||||||
.HasColumnType("nvarchar(max)");
|
.HasColumnType("nvarchar(max)");
|
||||||
|
|
Loading…
Reference in New Issue