修改解析IP区域位置的库 以及异地登录判断

Test_IRC_Net8
hang 2025-04-07 15:24:05 +08:00
parent 29d0ebdb7c
commit 1fef5509d1
5 changed files with 69 additions and 44 deletions

View File

@ -0,0 +1,42 @@
using IRaCIS.Core.Domain.Models;
using MaxMind.GeoIP2;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace IRaCIS.Core.Application.Helper
{
public static class IPCityHelper
{
public static string GetCityResponse(string ip)
{
var path = Path.Combine(AppContext.BaseDirectory, StaticData.Folder.Resources, "GeoLite2-City.mmdb");
try
{
using (var reader = new DatabaseReader(path))
{
var city = reader.City(ip);
//Console.WriteLine(city.Country.IsoCode); // 'US' 'CN'
//Console.WriteLine(city.Country.Name); // 'United States' 'China'
////Console.WriteLine(city.Country.Names["zh-CN"]); // '美国'
//Console.WriteLine(city.MostSpecificSubdivision.Name); // 'Minnesota' 'Hubei'
//Console.WriteLine(city.City.Name); // 'Minneapolis' 'WUHan'
return $"{city.Country.Name} | {city.MostSpecificSubdivision.Name} | {city.City.Name}";
}
}
catch (Exception ex)
{
return $"UN | UN | {ip}";
}
}
}
}

View File

@ -48,7 +48,7 @@ namespace IRaCIS.Core.Application.ViewModel
{ {
public Guid? TrialId { get; set; } public Guid? TrialId { get; set; }
public List<UserOptType> OptTypeList { get; set; } public List<UserOptType>? OptTypeList { get; set; }
public string? IP { get; set; } public string? IP { get; set; }

View File

@ -958,19 +958,19 @@ namespace IRaCIS.Core.Application.Service
//账号在系统存在 //账号在系统存在
if (isExistAccount || loginUser != null) if (isExistAccount || loginUser != null)
{ {
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));
string SplitAndConcatenate(string input) //string SplitAndConcatenate(string input)
{ //{
string[] parts = input.Split('|'); // string[] parts = input.Split('|');
return parts.Length >= 3 ? parts[0] + parts[1] : string.Join("", parts); // return parts.Length >= 3 ? parts[0] + parts[1] : string.Join("", parts);
} //}
if (existUserLoginInfo.LastLoginIP != string.Empty) var iPRegion = IPCityHelper.GetCityResponse(_userInfo.IP);
{
//设置上次登录的IP //设置本次登录的IP
await _identityUserRepository.BatchUpdateNoTrackingAsync(x => x.Id == existUserLoginInfo.Id, x => new IdentityUser() await _identityUserRepository.BatchUpdateNoTrackingAsync(x => x.Id == existUserLoginInfo.Id, x => new IdentityUser()
{ {
LastLoginIP = iPRegion, LastLoginIP = iPRegion,
@ -978,9 +978,11 @@ namespace IRaCIS.Core.Application.Service
}); });
if (existUserLoginInfo.LastLoginIP != string.Empty)
{
// 与上一次区域不一致 // 与上一次区域不一致
if (SplitAndConcatenate(existUserLoginInfo.LastLoginIP) != SplitAndConcatenate(iPRegion)) //if (SplitAndConcatenate(existUserLoginInfo.LastLoginIP) != SplitAndConcatenate(iPRegion))
if (existUserLoginInfo.LastLoginIP != iPRegion)
{ {
isLoginUncommonly = true; isLoginUncommonly = true;

View File

@ -106,34 +106,12 @@ namespace IRaCIS.Core.Application.Service
foreach (var ip in ipList) foreach (var ip in ipList)
{ {
try var ipRegion = IPCityHelper.GetCityResponse(ip);
{
using (var reader = new DatabaseReader(path))
{
var city = reader.City(ip); await _userLogRepository.BatchUpdateNoTrackingAsync(t => t.IP == ip, u => new UserLog() { IPRegion = ipRegion });
Console.WriteLine(city.Country.IsoCode); // 'US' 'CN'
Console.WriteLine(city.Country.Name); // 'United States' 'China'
//Console.WriteLine(city.Country.Names["zh-CN"]); // '美国'
Console.WriteLine(city.MostSpecificSubdivision.Name); // 'Minnesota' 'Hubei'
Console.WriteLine(city.City.Name); // 'Minneapolis' 'WUHan'
Console.WriteLine("----------------");
}
}
catch (Exception ex)
{
Console.WriteLine($"{ip}在数据库无法解析 {ex.Message}"); // 44.9733
}
} }
return ResponseOutput.Ok(); return ResponseOutput.Ok();
} }

View File

@ -1,5 +1,7 @@
using EntityFrameworkCore.Triggered; using EntityFrameworkCore.Triggered;
using IP2Region.Net.Abstractions; using IP2Region.Net.Abstractions;
using IRaCIS.Core.Application.Helper;
using MaxMind.GeoIP2;
namespace IRaCIS.Core.Application.Triggers namespace IRaCIS.Core.Application.Triggers
{ {
@ -18,10 +20,11 @@ namespace IRaCIS.Core.Application.Triggers
if (context.ChangeType == ChangeType.Added) if (context.ChangeType == ChangeType.Added)
{ {
var ipinfo = _searcher.Search(userLog.IP); //var ipinfo = _searcher.Search(userLog.IP);
userLog.IPRegion = string.Join('|', ipinfo.Split('|').TakeLast(3)); //userLog.IPRegion = string.Join('|', ipinfo.Split('|').TakeLast(3));
userLog.IPRegion = IPCityHelper.GetCityResponse(userLog.IP);
} }
} }