-
Notifications
You must be signed in to change notification settings - Fork 1.8k
Open
Description
重现步骤
Open API JWT Token 认证失败 & SQL 上线工单接口返回 500
描述
在使用 Archery Open API 时,发现以下问题:
问题 1:JWT Token 认证失败
- 现象:尝试使用 JWT Token 调用 Open API 接口,但接口返回认证失败。
- 补充说明:必须通过 Cookie(sessionid + csrftoken)才能正常调用接口。
- 期望行为:Open API 能够支持 JWT Token 认证,无需依赖 Cookie。
问题 2:SQL 上线工单清单接口返回 500
- 接口路径:
/api/v1/workflow/ - 现象:查询 SQL 上线工单清单时返回 500 错误,但其它查询接口正常。
- 期望行为:接口能够正常返回工单清单数据。
环境信息
- Archery 版本:v1.9.1
- 部署方式:K8s
- API 调用方式:Open API
复现步骤
- 使用 JWT Token 调用任意 Open API 接口 → 返回认证失败
- 使用 Cookie 调用
/api/v1/workflow/接口 → 返回 500
日志/报错信息
- 问题1:
curl --location 'https://archery.dev.com/api/v1/workflow/' \ --header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNzYzNjk5NTcxLCJpYXQiOjE3NjM2ODUxNzEsImp0aSI6IjQwNWIxZGVkOTM5MzQwMWQ4Mjc0ZWI4MWE3ODZhMTc5IiwidXNlcl9pZCI6MzN9.1kXjlKz96-3ue_RsOr_Jbv_wZc1HSWjm7htxJqTJ1W9' \ --header 'cookie: sessionid=xfvuant62n71tfcdhh15835m8xxww2fz' \ --header 'Content-Type: application/json' \ --data '{ "workflow": { "workflow_name": "Test-lives-100", "demand_url": "", "group_id": 1, "db_name": "cbum01", "is_backup": false, "engineer": "devops", "run_date_start": "2025-11-18T09:32:22.739Z", "run_date_end": "2025-11-18T09:32:22.739Z", "instance": 1 }, "sql_content": "alter table nacos_config_published_item modify item_key varchar(500) not null comment '\''Configuration item key'\''" }'
必须加上:--header 'cookie: sessionid=xfvuant62n71tfcdhh15835m8xxww2fz; sessionid=xfvuant62n71tfcdhh15835m8xxww2fz' \
请求认证才能通过。
- 问题2: 通过Open API Swagger 调试也报错,如图:
系统日志:
[2025-11-21 15:02:52,190][MainThread:140009487648576][task_id:default][exception_logging_middleware.py:12][ERROR]- Traceback (most recent call last):
File "/opt/venv4archery/lib/python3.9/site-packages/django/core/handlers/base.py", line 197, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/opt/venv4archery/lib/python3.9/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
return view_func(*args, **kwargs)
File "/opt/venv4archery/lib/python3.9/site-packages/django/views/generic/base.py", line 103, in view
return self.dispatch(request, *args, **kwargs)
File "/opt/venv4archery/lib/python3.9/site-packages/rest_framework/views.py", line 509, in dispatch
response = self.handle_exception(exc)
File "/opt/venv4archery/lib/python3.9/site-packages/rest_framework/views.py", line 469, in handle_exception
self.raise_uncaught_exception(exc)
File "/opt/venv4archery/lib/python3.9/site-packages/rest_framework/views.py", line 480, in raise_uncaught_exception
raise exc
File "/opt/venv4archery/lib/python3.9/site-packages/rest_framework/views.py", line 506, in dispatch
response = handler(request, *args, **kwargs)
File "/opt/archery/sql_api/api_workflow.py", line 119, in get
page_wf = self.paginate_queryset(queryset=workflows)
File "/opt/venv4archery/lib/python3.9/site-packages/rest_framework/generics.py", line 171, in paginate_queryset
return self.paginator.paginate_queryset(queryset, self.request, view=self)
File "/opt/venv4archery/lib/python3.9/site-packages/rest_framework/pagination.py", line 204, in paginate_queryset
self.page = paginator.page(page_number)
File "/opt/venv4archery/lib/python3.9/site-packages/django/core/paginator.py", line 75, in page
number = self.validate_number(number)
File "/opt/venv4archery/lib/python3.9/site-packages/django/core/paginator.py", line 53, in validate_number
if number > self.num_pages:
File "/opt/venv4archery/lib/python3.9/site-packages/django/utils/functional.py", line 57, in __get__
res = instance.__dict__[self.name] = self.func(instance)
File "/opt/venv4archery/lib/python3.9/site-packages/django/core/paginator.py", line 102, in num_pages
if self.count == 0 and not self.allow_empty_first_page:
File "/opt/venv4archery/lib/python3.9/site-packages/django/utils/functional.py", line 57, in __get__
res = instance.__dict__[self.name] = self.func(instance)
File "/opt/venv4archery/lib/python3.9/site-packages/django/core/paginator.py", line 97, in count
return len(self.object_list)
TypeError: object of type 'NoneType' has no len()
预期外的结果
重要步骤中,已经描述
日志文本
[2025-11-21 15:02:52,190][MainThread:140009487648576][task_id:default][exception_logging_middleware.py:12][ERROR]- Traceback (most recent call last):
File "/opt/venv4archery/lib/python3.9/site-packages/django/core/handlers/base.py", line 197, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/opt/venv4archery/lib/python3.9/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
return view_func(*args, **kwargs)
File "/opt/venv4archery/lib/python3.9/site-packages/django/views/generic/base.py", line 103, in view
return self.dispatch(request, *args, **kwargs)
File "/opt/venv4archery/lib/python3.9/site-packages/rest_framework/views.py", line 509, in dispatch
response = self.handle_exception(exc)
File "/opt/venv4archery/lib/python3.9/site-packages/rest_framework/views.py", line 469, in handle_exception
self.raise_uncaught_exception(exc)
File "/opt/venv4archery/lib/python3.9/site-packages/rest_framework/views.py", line 480, in raise_uncaught_exception
raise exc
File "/opt/venv4archery/lib/python3.9/site-packages/rest_framework/views.py", line 506, in dispatch
response = handler(request, *args, **kwargs)
File "/opt/archery/sql_api/api_workflow.py", line 119, in get
page_wf = self.paginate_queryset(queryset=workflows)
File "/opt/venv4archery/lib/python3.9/site-packages/rest_framework/generics.py", line 171, in paginate_queryset
return self.paginator.paginate_queryset(queryset, self.request, view=self)
File "/opt/venv4archery/lib/python3.9/site-packages/rest_framework/pagination.py", line 204, in paginate_queryset
self.page = paginator.page(page_number)
File "/opt/venv4archery/lib/python3.9/site-packages/django/core/paginator.py", line 75, in page
number = self.validate_number(number)
File "/opt/venv4archery/lib/python3.9/site-packages/django/core/paginator.py", line 53, in validate_number
if number > self.num_pages:
File "/opt/venv4archery/lib/python3.9/site-packages/django/utils/functional.py", line 57, in __get__
res = instance.__dict__[self.name] = self.func(instance)
File "/opt/venv4archery/lib/python3.9/site-packages/django/core/paginator.py", line 102, in num_pages
if self.count == 0 and not self.allow_empty_first_page:
File "/opt/venv4archery/lib/python3.9/site-packages/django/utils/functional.py", line 57, in __get__
res = instance.__dict__[self.name] = self.func(instance)
File "/opt/venv4archery/lib/python3.9/site-packages/django/core/paginator.py", line 97, in count
return len(self.object_list)
TypeError: object of type 'NoneType' has no len()版本
1.9.1
部署方式
K8S
是否还有其他可以辅助定位问题的信息?比如数据库版本等
MySQL: 5.7.26
Browsers: Chrome
goInception: v1.2.5-49
Metadata
Metadata
Assignees
Labels
No labels