CAS登录配置后,一直好好的,可以登录,然后今天触发了
日志如下:
2026-02-05 13:12:30 [INFO] Authenticate user: xxxxxx
2026-02-05 13:39:41 [INFO] Authentication LDAP backend
2026-02-05 13:39:41 [INFO] No username or password
2026-02-05 13:50:25 [INFO] Authentication LDAP backend
2026-02-05 13:50:25 [INFO] No username or password
2026-02-05 13:58:32 [INFO] Authentication LDAP backend
2026-02-05 13:58:32 [INFO] No username or password
2026-02-05 14:00:55 [INFO] Authentication LDAP backend
2026-02-05 14:00:55 [INFO] Authenticate user:xxxxx
2026-02-05 14:01:06 [INFO] Authentication LDAP backend
2026-02-05 14:01:06 [INFO] No username or password
2026-02-05 14:10:50 [INFO] Authentication LDAP backend
2026-02-05 14:10:50 [INFO] Authenticate user: xxxxxxx
2026-02-05 14:22:41 [INFO] Authentication LDAP backend
2026-02-05 14:22:41 [INFO] No username or password
2026-02-05 14:23:25 [INFO] Authentication LDAP backend
2026-02-05 14:23:25 [INFO] No username or password
2026-02-05 14:23:26 [INFO] Authentication LDAP backend
2026-02-05 14:23:26 [INFO] No username or password
2026-02-05 14:23:28 [INFO] Authentication LDAP backend
2026-02-05 14:23:28 [INFO] No username or password
2026-02-05 14:23:29 [INFO] Authentication LDAP backend
2026-02-05 14:23:29 [INFO] No username or password
2026-02-05 14:23:31 [INFO] Authentication LDAP backend
2026-02-05 14:23:31 [INFO] No username or password
2026-02-05 14:23:32 [INFO] Authentication LDAP backend
2026-02-05 14:23:32 [INFO] No username or password
2026-02-05 14:23:32 [INFO] Authentication LDAP backend
2026-02-05 14:23:32 [INFO] No username or password
2026-02-05 14:23:32 [ERRO] Internal Server Error: /core/auth/cas/login/
Traceback (most recent call last):
File “/opt/jumpserver/.venv/lib/python3.11/site-packages/asgiref/sync.py”, line 552, in thread_handler
raise exc_info[1]
File “/opt/jumpserver/.venv/lib/python3.11/site-packages/django/core/handlers/exception.py”, line 43, in inner
response = await get_response(request)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/opt/jumpserver/.venv/lib/python3.11/site-packages/asgiref/sync.py”, line 552, in thread_handler
raise exc_info[1]
File “/opt/jumpserver/.venv/lib/python3.11/site-packages/django/core/handlers/base.py”, line 253, in _get_response_async
response = await wrapped_callback(
^^^^^^^^^^^^^^^^^^^^^^^
File “/opt/jumpserver/.venv/lib/python3.11/site-packages/asgiref/sync.py”, line 502, in call
ret = await asyncio.shield(exec_coro)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/opt/jumpserver/.venv/lib/python3.11/site-packages/asgiref/current_thread_executor.py”, line 40, in run
result = self.fn(*self.args, **self.kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/opt/jumpserver/.venv/lib/python3.11/site-packages/asgiref/sync.py”, line 556, in thread_handler
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File “/usr/local/lib/python3.11/contextlib.py”, line 81, in inner
return func(*args, **kwds)
^^^^^^^^^^^^^^^^^^^
File “/opt/jumpserver/.venv/lib/python3.11/site-packages/django/views/generic/base.py”, line 103, in view
return self.dispatch(request, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/opt/jumpserver/.venv/lib/python3.11/site-packages/django/utils/decorators.py”, line 46, in _wrapper
return bound_method(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/opt/jumpserver/.venv/lib/python3.11/site-packages/django/views/decorators/csrf.py”, line 55, in wrapped_view
return view_func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/opt/jumpserver/.venv/lib/python3.11/site-packages/django_cas_ng/views.py”, line 72, in dispatch
return super().dispatch(request, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/opt/jumpserver/.venv/lib/python3.11/site-packages/django/views/generic/base.py”, line 142, in dispatch
return handler(request, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/opt/jumpserver/apps/authentication/backends/cas/views.py”, line 16, in get
resp = super().get(request)
^^^^^^^^^^^^^^^^^^^^
File “/opt/jumpserver/.venv/lib/python3.11/site-packages/django_cas_ng/views.py”, line 128, in get
user = authenticate(ticket=ticket,
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/opt/jumpserver/apps/authentication/mixins.py”, line 74, in authenticate
user = backend.authenticate(request, **credentials)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/opt/jumpserver/apps/authentication/backends/cas/backends.py”, line 48, in authenticate
user = super().authenticate(request, ticket=ticket, service=service)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/opt/jumpserver/.venv/lib/python3.11/site-packages/django_cas_ng/backends.py”, line 81, in authenticate
user = UserModel._default_manager.get_by_natural_key(username)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/opt/jumpserver/apps/authentication/backends/cas/backends.py”, line 41, in get_by_natural_key
user = original_get_by_natural_key(username)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/opt/jumpserver/apps/authentication/backends/cas/backends.py”, line 37, in get_by_natural_key
if threading.get_ident() != thread_local.thread_id:
^^^^^^^^^^^^^^^^^^^^^^
AttributeError: ‘_thread._local’ object has no attribute ‘thread_id’
2026-02-05 14:23:34 [ERRO] Internal Server Error: /core/auth/cas/login/
Traceback (most recent call last):
File “/opt/jumpserver/.venv/lib/python3.11/site-packages/asgiref/sync.py”, line 552, in thread_handler
raise exc_info[1]
File “/opt/jumpserver/.venv/lib/python3.11/site-packages/django/core/handlers/exception.py”, line 43, in inner
response = await get_response(request)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/opt/jumpserver/.venv/lib/python3.11/site-packages/asgiref/sync.py”, line 552, in thread_handler
raise exc_info[1]
File “/opt/jumpserver/.venv/lib/python3.11/site-packages/django/core/handlers/base.py”, line 253, in _get_response_async
response = await wrapped_callback(
^^^^^^^^^^^^^^^^^^^^^^^
File “/opt/jumpserver/.venv/lib/python3.11/site-packages/asgiref/sync.py”, line 502, in call
ret = await asyncio.shield(exec_coro)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/opt/jumpserver/.venv/lib/python3.11/site-packages/asgiref/current_thread_executor.py”, line 40, in run
result = self.fn(*self.args, **self.kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/opt/jumpserver/.venv/lib/python3.11/site-packages/asgiref/sync.py”, line 556, in thread_handler
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File “/usr/local/lib/python3.11/contextlib.py”, line 81, in inner
return func(*args, **kwds)
^^^^^^^^^^^^^^^^^^^
File “/opt/jumpserver/.venv/lib/python3.11/site-packages/django/views/generic/base.py”, line 103, in view
return self.dispatch(request, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/opt/jumpserver/.venv/lib/python3.11/site-packages/django/utils/decorators.py”, line 46, in _wrapper
return bound_method(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/opt/jumpserver/.venv/lib/python3.11/site-packages/django/views/decorators/csrf.py”, line 55, in wrapped_view
return view_func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/opt/jumpserver/.venv/lib/python3.11/site-packages/django_cas_ng/views.py”, line 72, in dispatch
return super().dispatch(request, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/opt/jumpserver/.venv/lib/python3.11/site-packages/django/views/generic/base.py”, line 142, in dispatch
return handler(request, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/opt/jumpserver/apps/authentication/backends/cas/views.py”, line 16, in get
resp = super().get(request)
^^^^^^^^^^^^^^^^^^^^
File “/opt/jumpserver/.venv/lib/python3.11/site-packages/django_cas_ng/views.py”, line 128, in get
user = authenticate(ticket=ticket,
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/opt/jumpserver/apps/authentication/mixins.py”, line 74, in authenticate
user = backend.authenticate(request, **credentials)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/opt/jumpserver/apps/authentication/backends/cas/backends.py”, line 48, in authenticate
user = super().authenticate(request, ticket=ticket, service=service)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/opt/jumpserver/.venv/lib/python3.11/site-packages/django_cas_ng/backends.py”, line 81, in authenticate
user = UserModel._default_manager.get_by_natural_key(username)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/opt/jumpserver/apps/authentication/backends/cas/backends.py”, line 37, in get_by_natural_key
if threading.get_ident() != thread_local.thread_id:
^^^^^^^^^^^^^^^^^^^^^^
AttributeError: ‘_thread._local’ object has no attribute ‘thread_id’
