perf: Skip alert if login city seen in past 7 days

pull/15313/head
wangruidong 2025-04-29 16:19:02 +08:00 committed by 老广
parent 1bb44e783a
commit 282ca25504
1 changed files with 10 additions and 5 deletions

View File

@ -1,16 +1,16 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# #
import ipaddress import ipaddress
from datetime import datetime, timedelta
from urllib.parse import urljoin, urlparse from urllib.parse import urljoin, urlparse
from django.conf import settings from django.conf import settings
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from audits.const import DEFAULT_CITY
from users.models import User
from audits.models import UserLoginLog from audits.models import UserLoginLog
from common.utils import get_ip_city, get_request_ip
from common.utils import get_logger, get_object_or_none from common.utils import get_logger, get_object_or_none
from common.utils import validate_ip, get_ip_city, get_request_ip from users.models import User
from .notifications import DifferentCityLoginMessage from .notifications import DifferentCityLoginMessage
logger = get_logger(__file__) logger = get_logger(__file__)
@ -33,8 +33,13 @@ def check_different_city_login_if_need(user, request):
return return
city = get_ip_city(ip) city = get_ip_city(ip)
last_city = get_ip_city(last_user_login.ip) last_cities = UserLoginLog.objects.filter(
if city == last_city: datetime__gte=datetime.now() - timedelta(days=7),
username__in=usernames,
status=True
).exclude(city__in=city_white).values_list('city', flat=True).distinct()
if city in last_cities:
return return
DifferentCityLoginMessage(user, ip, city).publish_async() DifferentCityLoginMessage(user, ip, city).publish_async()