diff --git a/apps/accounts/serializers/account/base.py b/apps/accounts/serializers/account/base.py
index 47eeb457a..6c1eb95ed 100644
--- a/apps/accounts/serializers/account/base.py
+++ b/apps/accounts/serializers/account/base.py
@@ -45,7 +45,7 @@ class AuthValidateMixin(serializers.Serializer):
         validated_data['secret'] = secret
         for field in ('secret',):
             value = validated_data.get(field)
-            if value is None:
+            if not value:
                 validated_data.pop(field, None)
         validated_data.pop('passphrase', None)
 
diff --git a/apps/accounts/serializers/automations/change_secret.py b/apps/accounts/serializers/automations/change_secret.py
index 4fbd55801..6b7fd86d6 100644
--- a/apps/accounts/serializers/automations/change_secret.py
+++ b/apps/accounts/serializers/automations/change_secret.py
@@ -59,7 +59,7 @@ class ChangeSecretAutomationSerializer(AuthValidateMixin, BaseAutomationSerializ
         }}
 
     def validate_password_rules(self, password_rules):
-        secret_type = self.initial_secret_type
+        secret_type = self.initial_data['secret_type']
         if secret_type != SecretType.PASSWORD:
             return password_rules
 
diff --git a/apps/common/permissions.py b/apps/common/permissions.py
index 87328c809..d28157085 100644
--- a/apps/common/permissions.py
+++ b/apps/common/permissions.py
@@ -6,10 +6,10 @@ from django.conf import settings
 from rest_framework import permissions
 
 from authentication.const import ConfirmType
-from common.exceptions import UserConfirmRequired
-from orgs.utils import tmp_to_root_org
 from authentication.models import ConnectionToken
+from common.exceptions import UserConfirmRequired
 from common.utils import get_object_or_none
+from orgs.utils import tmp_to_root_org
 
 
 class IsValidUser(permissions.IsAuthenticated, permissions.BasePermission):
@@ -17,13 +17,13 @@ class IsValidUser(permissions.IsAuthenticated, permissions.BasePermission):
 
     def has_permission(self, request, view):
         return super().has_permission(request, view) \
-               and request.user.is_valid
+            and request.user.is_valid
 
 
 class IsValidUserOrConnectionToken(IsValidUser):
     def has_permission(self, request, view):
         return super().has_permission(request, view) \
-               or self.is_valid_connection_token(request)
+            or self.is_valid_connection_token(request)
 
     @staticmethod
     def is_valid_connection_token(request):
@@ -38,13 +38,13 @@ class IsValidUserOrConnectionToken(IsValidUser):
 class OnlySuperUser(IsValidUser):
     def has_permission(self, request, view):
         return super().has_permission(request, view) \
-               and request.user.is_superuser
+            and request.user.is_superuser
 
 
 class IsServiceAccount(IsValidUser):
     def has_permission(self, request, view):
         return super().has_permission(request, view) \
-               and request.user.is_service_account
+            and request.user.is_service_account
 
 
 class WithBootstrapToken(permissions.BasePermission):
diff --git a/apps/jumpserver/api.py b/apps/jumpserver/api.py
index 045c208c3..6a3617c0c 100644
--- a/apps/jumpserver/api.py
+++ b/apps/jumpserver/api.py
@@ -1,28 +1,28 @@
 import time
 
 from django.core.cache import cache
-from django.utils import timezone
-from django.utils.timesince import timesince
 from django.db.models import Count, Max, F
 from django.http.response import JsonResponse, HttpResponse
-from rest_framework.views import APIView
+from django.utils import timezone
+from django.utils.timesince import timesince
 from rest_framework.permissions import AllowAny
 from rest_framework.request import Request
 from rest_framework.response import Response
+from rest_framework.views import APIView
 
-from users.models import User
-from assets.models import Asset
 from assets.const import AllTypes
-from terminal.models import Session, Command
-from terminal.utils import ComponentsPrometheusMetricsUtil
-from orgs.utils import current_org
+from assets.models import Asset
+from audits.const import LoginStatusChoices
+from audits.models import UserLoginLog, PasswordChangeLog, OperateLog, FTPLog
+from common.utils import lazyproperty
+from common.utils.timezone import local_now, local_zero_hour
 from ops.const import JobStatus
 from ops.models import Job, JobExecution
-from common.utils import lazyproperty
-from audits.models import UserLoginLog, PasswordChangeLog, OperateLog, FTPLog
-from audits.const import LoginStatusChoices
-from common.utils.timezone import local_now, local_zero_hour
 from orgs.caches import OrgResourceStatisticsCache
+from orgs.utils import current_org
+from terminal.models import Session, Command
+from terminal.utils import ComponentsPrometheusMetricsUtil
+from users.models import User
 
 __all__ = ['IndexApi']
 
@@ -296,9 +296,13 @@ class DatesLoginMetricMixin:
         return self.login_logs_queryset.filter(status=LoginStatusChoices.success).count()
 
     @lazyproperty
-    def user_login_amount(self):
+    def user_login_logs_amount(self):
         return self.login_logs_queryset.values('username').count()
 
+    @lazyproperty
+    def user_login_amount(self):
+        return self.login_logs_queryset.values('username').distinct().count()
+
     @lazyproperty
     def operate_logs_amount(self):
         return self.operate_logs_queryset.count()
@@ -379,6 +383,11 @@ class IndexApi(DateTimeMixin, DatesLoginMetricMixin, APIView):
                 'total_count_login_users': self.user_login_amount
             })
 
+        if _all or query_params.get('total_count') or query_params.get('total_count_login_user_logs'):
+            data.update({
+                'total_count_login_user_logs': self.user_login_logs_amount
+            })
+
         if _all or query_params.get('total_count') or query_params.get('total_count_today_active_assets'):
             data.update({
                 'total_count_today_active_assets': caches.total_count_today_active_assets,