mirror of
https://github.com/jumpserver/jumpserver.git
synced 2025-07-04 10:36:37 +00:00
parent
803d590096
commit
b023ca0c69
@ -268,7 +268,10 @@ class UserSessionViewSet(CommonApiMixin, viewsets.ModelViewSet):
|
|||||||
return user_ids
|
return user_ids
|
||||||
|
|
||||||
def get_queryset(self):
|
def get_queryset(self):
|
||||||
queryset = UserSession.objects.filter(date_expired__gt=timezone.now())
|
keys = UserSession.get_keys()
|
||||||
|
queryset = UserSession.objects.filter(
|
||||||
|
date_expired__gt=timezone.now(), key__in=keys
|
||||||
|
)
|
||||||
if current_org.is_root():
|
if current_org.is_root():
|
||||||
return queryset
|
return queryset
|
||||||
user_ids = self.org_user_ids
|
user_ids = self.org_user_ids
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
import os
|
import os
|
||||||
import uuid
|
import uuid
|
||||||
|
from importlib import import_module
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
from django.core.cache import caches
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.db.models import Q
|
from django.db.models import Q
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
@ -269,9 +271,17 @@ class UserSession(models.Model):
|
|||||||
def backend_display(self):
|
def backend_display(self):
|
||||||
return gettext(self.backend)
|
return gettext(self.backend)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def get_keys():
|
||||||
|
session_store_cls = import_module(settings.SESSION_ENGINE).SessionStore
|
||||||
|
cache_key_prefix = session_store_cls.cache_key_prefix
|
||||||
|
keys = caches[settings.SESSION_CACHE_ALIAS].keys('*')
|
||||||
|
return [k.replace(cache_key_prefix, '') for k in keys]
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def clear_expired_sessions(cls):
|
def clear_expired_sessions(cls):
|
||||||
cls.objects.filter(date_expired__lt=timezone.now()).delete()
|
cls.objects.filter(date_expired__lt=timezone.now()).delete()
|
||||||
|
cls.objects.exclude(key__in=cls.get_keys()).delete()
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
ordering = ['-date_created']
|
ordering = ['-date_created']
|
||||||
|
@ -5,7 +5,6 @@ from importlib import import_module
|
|||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.contrib.auth import BACKEND_SESSION_KEY
|
from django.contrib.auth import BACKEND_SESSION_KEY
|
||||||
from django.core.cache import caches
|
|
||||||
from django.dispatch import receiver
|
from django.dispatch import receiver
|
||||||
from django.utils import timezone, translation
|
from django.utils import timezone, translation
|
||||||
from django.utils.functional import LazyObject
|
from django.utils.functional import LazyObject
|
||||||
@ -83,11 +82,10 @@ def generate_data(username, request, login_type=None):
|
|||||||
|
|
||||||
|
|
||||||
def create_user_session(request, user_id, instance: UserLoginLog):
|
def create_user_session(request, user_id, instance: UserLoginLog):
|
||||||
session_key = request.session.session_key
|
session_key = request.session.session_key or '-'
|
||||||
session_store_cls = import_module(settings.SESSION_ENGINE).SessionStore
|
session_store_cls = import_module(settings.SESSION_ENGINE).SessionStore
|
||||||
session_store = session_store_cls(session_key=session_key)
|
session_store = session_store_cls(session_key=session_key)
|
||||||
cache_key = session_store.cache_key
|
ttl = session_store.get_expiry_age()
|
||||||
ttl = caches[settings.SESSION_CACHE_ALIAS].ttl(cache_key)
|
|
||||||
|
|
||||||
online_session_data = {
|
online_session_data = {
|
||||||
'user_id': user_id,
|
'user_id': user_id,
|
||||||
@ -114,9 +112,8 @@ def on_user_auth_success(sender, user, request, login_type=None, **kwargs):
|
|||||||
request.session['login_time'] = data['datetime'].strftime("%Y-%m-%d %H:%M:%S")
|
request.session['login_time'] = data['datetime'].strftime("%Y-%m-%d %H:%M:%S")
|
||||||
data.update({'mfa': int(user.mfa_enabled), 'status': True})
|
data.update({'mfa': int(user.mfa_enabled), 'status': True})
|
||||||
instance = write_login_log(**data)
|
instance = write_login_log(**data)
|
||||||
session_key = request.session.session_key
|
|
||||||
# TODO 目前只记录 web 登录的 session
|
# TODO 目前只记录 web 登录的 session
|
||||||
if not session_key or instance.type != LoginTypeChoices.web:
|
if instance.type != LoginTypeChoices.web:
|
||||||
return
|
return
|
||||||
create_user_session(request, user.id, instance)
|
create_user_session(request, user.id, instance)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user