feat(task-buttons): 跳转按钮可追加登录态 token+username + token 登录离线测试映射

rwfx/3qfx/xdfx 任务工作区的可配置跳转按钮(按钮管理)新增「追加登录态」开关:
url 类型按钮可在外链后拼 ?token=<token1>&username=<登录名>(参数名可配,默认
token/username),供跳转目标外部系统识别当前登录用户。

- 仅 token 登录(login/token)生效: token1 = ?authToken=,username = 后端用
  token 调 getTokenInfo 解析出的原始登录名(非邮箱前缀/非解 JWT)。二者登录时
  经 persistLoginCredentials 存入 login.token1/login.username(scoped-storage
  自动隔离嵌入/独立会话);非 token 登录读不到 token1 则跳过追加。
- 后端 UsernameLoginResponse 回传 username(原始名,规避邮箱归一化有损);
  token_login 加 mock_tokens 离线测试映射(123ewq->admin),命中即跳过外网
  getTokenInfo,便于本地全链路联调。
- task_buttons 加列 append_auth/auth_token_param/auth_name_param
  (migration 20260625_01 + 幂等 SQL)。

Tests: test_task_buttons.py, test_auth_login_modes.py(mock token/username 回传)。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
吉鑫升andClaude Opus 4.8 committed 2026-06-25 14:52:07 +08:00
1 parent 6989dd45f1
commit f8b40353ef
18 files changed
+298 -6

No files matched your search

@@ -31,6 +31,9 @@ interface ServerButton {
id_param: string;
id_kind: string;
open_mode: string;
append_auth: boolean;
auth_token_param: string;
auth_name_param: string;
enabled: boolean;
sort_order: number;
}
@@ -46,6 +49,9 @@ function toButton(s: ServerButton): TaskButton {
idParam: s.id_param || "id",
idKind: (s.id_kind as TaskButtonIdKind) ?? "task",
openMode: (s.open_mode as TaskButtonOpenMode) ?? "blank",
appendAuth: s.append_auth ?? false,
authTokenParam: s.auth_token_param || "token",
authNameParam: s.auth_name_param || "username",
enabled: s.enabled ?? true,
sortOrder: s.sort_order ?? 0,
};
@@ -62,6 +68,9 @@ function toBody(b: TaskButton): ServerButton {
id_param: b.idParam,
id_kind: b.idKind,
open_mode: b.openMode,
append_auth: b.appendAuth,
auth_token_param: b.authTokenParam,
auth_name_param: b.authNameParam,
enabled: b.enabled,
sort_order: b.sortOrder,
};