WARNING: THIS SITE IS A MIRROR OF GITHUB.COM / IT CANNOT LOGIN OR REGISTER ACCOUNTS / THE CONTENTS ARE PROVIDED AS-IS / THIS SITE ASSUMES NO RESPONSIBILITY FOR ANY DISPLAYED CONTENT OR LINKS / IF YOU FOUND SOMETHING MAY NOT GOOD FOR EVERYONE, CONTACT ADMIN AT ilovescratch@foxmail.com
Skip to content

Open API JWT Token 认证失败 & SQL 上线工单接口返回 500 错误 #3094

@tingdaodi

Description

@tingdaodi

重现步骤

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

复现步骤

  1. 使用 JWT Token 调用任意 Open API 接口 → 返回认证失败
  2. 使用 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 调试也报错,如图:
Image

系统日志:

[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

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions