diff --git a/IRaCIS.Core.Application/Service/Management/UserService.cs b/IRaCIS.Core.Application/Service/Management/UserService.cs index 795cb8553..3fe37375c 100644 --- a/IRaCIS.Core.Application/Service/Management/UserService.cs +++ b/IRaCIS.Core.Application/Service/Management/UserService.cs @@ -18,6 +18,7 @@ using LoginReturnDTO = IRaCIS.Application.Contracts.LoginReturnDTO; using IRaCIS.Core.Application.Auth; using IRaCIS.Core.Domain.Models; using IRaCIS.Core.Application.Helper; +using IP2Region.Net.Abstractions; namespace IRaCIS.Application.Services { @@ -37,6 +38,7 @@ namespace IRaCIS.Application.Services private readonly IReadingImageTaskService _readingImageTaskService; private readonly IOptionsMonitor _verifyConfig; private readonly SystemEmailSendConfig _systemEmailConfig; + public ISearcher _searcher; public UserService(IRepository userRepository, @@ -44,6 +46,7 @@ namespace IRaCIS.Application.Services IRepository verificationCodeRepository, IRepository doctorRepository, IEasyCachingProvider cache, + ISearcher searcher, IReadingImageTaskService readingImageTaskService, IRepository userTrialRepository, IOptionsMonitor verifyConfig, @@ -57,6 +60,7 @@ namespace IRaCIS.Application.Services this._userPassWordLogRepository = userPassWordLogRepository; _verifyConfig = verifyConfig; _cache = cache; + this._searcher = searcher; this._readingImageTaskService = readingImageTaskService; _userRepository = userRepository; _mailVerificationService = mailVerificationService; @@ -802,12 +806,14 @@ namespace IRaCIS.Application.Services //登录成功 清除缓存 _cache.Set(cacheKey, 0, TimeSpan.FromMinutes(lockoutMinutes)); + var ipinfo = _searcher.Search(_userInfo.IP); + var iPRegion = string.Join('|', ipinfo.Split('|').TakeLast(3)); if (loginUser.LastLoginIP != string.Empty) { // 与上一次IP不一致 - if (loginUser.LastLoginIP != _userInfo.IP) + if (loginUser.LastLoginIP != iPRegion) { loginUser.LoginState = 2; } @@ -828,10 +834,10 @@ namespace IRaCIS.Application.Services }); } - + await _userRepository.BatchUpdateNoTrackingAsync(x => x.Id == loginUser.Id, x => new User() { - LastLoginIP = _userInfo.IP, + LastLoginIP = iPRegion, LastLoginTime = DateTime.Now });