| content |
{"Commits":[{"Sha1":"06daf4a65 {"Commits":[{"Sha1":"06daf4a651e1a490ace181ac708099def39e8de0","Message":"fix: 合并邀请页密码要求说明与激活错误反馈修复\n\n用户发现从邀请邮件进入接受邀请页时,设置过短的新密码只会看到\"请求未完成,安全令牌失效时刷新页面重试\"的通用提示。本次合入 feat/console-layout 上的前端修复,让用户能按提示修改后重新提交。\n\n实现内容:\n- 邀请页修复(765bf82):api.ts 导出 apiErrorFromResponse 供 /activate 失败时复用错误体解析;激活仍以 urlencoded 表单提交、只按状态码判定 HTML 成功响应;密码字段说明新账号须为 12—128 个字符,不对已有账号原密码做最短长度拦截;INVALID_PASSWORD 显示在密码字段下方并聚焦,INVALID_ACTIVATION、INVITATION_NOT_APPLICABLE、CONFLICT、401/403、429、网络异常与 5xx 分别给出固定安全文案\n\n验证:\n- 合并前确认分支基于 main 63544c6,main 在其后没有新提交;主目录未提交改动仅在 scripts/experience/、docs/handoff/demo-video-env-01.md 与 iam-demo-video/,与本次合并没有共同文件\n- 分支上 iam-admin-web 的 format:check、typecheck、lint 通过\n- 未运行:Vitest 单元测试、构建、后端测试、浏览器检查与真实邀请激活\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-18T20:58:53-07:00"},{"Sha1":"765bf820452bc4d64f63ed449b249fafcfc1f60d","Message":"fix(console): 邀请页说明新密码要求并按错误码反馈激活失败\n\n接受邀请页没有说明新账号密码须为 12—128 个字符;激活失败时直接构造不带错误码的 ApiError,INVALID_PASSWORD 等错误码丢失,页面只能显示\"请求未完成,安全令牌失效时刷新页面重试\"的通用提示。\n\n实现内容:\n- api.ts 将内部 toApiError 改名并导出为 apiErrorFromResponse,供成功时返回 HTML 的 /activate 在失败时复用错误体解析;request 的行为不变\n- 激活改由 submitActivation 提交:保持 urlencoded 表单,不设 Accept: application/json,只按状态码判定成功、不解析 HTML 正文;失败时保留 HTTP 状态、code、trace_id 与纯数字 Retry-After;401/403 丢弃缓存的 CSRF 令牌,供用户手动重新提交;不自动重试\n- 密码字段说明改为\"已有 IAM 账号请填写原密码;新账号请设置 12—128 个字符的密码\";因页面分不清新旧账号,不设 minLength、不在提交前拦截短密码,只拦截空密码\n- 新增 activationFailure 映射:INVALID_PASSWORD 显示在密码字段下方并在渲染后聚焦,不叠加顶部告警;INVALID_ACTIVATION、INVITATION_NOT_APPLICABLE、CONFLICT 使用固定文案,不判断账号是否存在;401/403 只说明未通过安全校验,不断言令牌失效;404/409 其他情况与未知错误码安全回退;429 使用有效的 Retry-After;网络异常与 5xx 显示\"提交结果未知\";获取安全令牌失败显示\"邀请尚未提交\"\n- 告警标题随反馈类型变化并显示追踪编号;找回密码、验证邮箱页继续使用原有 failureCopy 文案\n\n验证:\n- npm --prefix iam-admin-web run format:check:通过\n- npm --prefix iam-admin-web run typecheck:通过\n- npm --prefix iam-admin-web run lint:通过\n- 本地演示 IAM 上用 curl 以无效凭据 POST /activate:返回 400 JSON,含 code=INVALID_ACTIVATION、message、trace_id,确认失败响应可按错误码解析\n- 单元测试、浏览器检查与真实邀请激活:未运行\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-18T20:58:01-07:00"},{"Sha1":"63544c67bb5cd377f09d6696006f02363a77353a","Message":"fix(auth): 修复会话过期后刷新页面返回认证错误\n\n过期身份在页面路由执行前被统一返回 401 JSON,导致首次刷新无法进入登录页。\n\n实现内容:\n- 控制台页面清理失效会话后跳转登录页,携带过期提示和安全编码的返回地址\n- 公开页面和静态资源按匿名继续处理,API 保留原 401 JSON 响应\n- 协议授权 GET 请求恢复原匿名登录流程,保留其他协议端点的错误契约\n- 补充地址边界、空闲与绝对到期、账号失效及跨实例身份清理回归测试\n\n验证:\n- Java 25 下服务端 223 项及依赖模块 95 项单元测试通过\n- SessionPageIT、SessionLifecycleIT、LoginSelectionIT、ProtocolIT、PackagedConsoleIT、BrowserSecurityIT 共 69 项集成测试最终通过\n- 新增用例修正绝对跳转地址断言和双时钟测试准备后,重跑 SessionPageIT 17 项全部通过\n- Maven 编译、Spotless 格式检查及 git diff --check 通过\n- 未运行全部集成测试,未进行真实浏览器等待过期后的人工验收\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-18T20:32:14-07:00"},{"Sha1":"6ab56b752dc0439c6c33c0e9943e2ede21a3f5b7","Message":"feat: 合并隐藏无权进入的平台与应用入口\n\n用户验收后提出,只负责企业的管理员不应看到平台管理与应用列表入口。按“进不去的入口一律不显示”的统一规则,合入 feat/console-layout 上的前端调整。\n\n实现内容:\n- 入口隐藏(3ddc9da):侧栏无权分组整组隐藏;切换弹窗的平台入口只对平台管理员显示;工作台入口卡只渲染可进入的入口(平台管理员 3 个、应用管理员 2 个、只负责企业的管理员 1 个,单入口整行横排);工作台账号卡不再显示“没有平台管理身份”\n\n验证:\n- 合并前确认分支基于 28fda4f,main 在其后只有合并提交 58745d8,与分支内容无冲突;主目录未提交改动仅在 scripts/experience/,与本次合并没有共同文件\n- 分支上 iam-admin-web npm run check 通过(格式、lint、类型检查、Vitest 37 个文件 319 项、构建)\n- 未运行:后端测试;真实企业管理员、应用管理员账号的整页走查与部署环境验收\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-16T20:38:26-07:00"},{"Sha1":"58745d8c25c809411e3c9cb00249b911ba89d5db","Message":"fix: 合并业务应用登录回跳与管理工作台门禁修复\n\n演示部署后发现两个问题:从业务应用登录并完成 MFA 后会先进入 IAM 控制台首页再回到业务应用;只能登录业务应用的普通员工也能进入管理工作台外壳。本次合入 feat/console-layout 上的前端修复与交接说明。\n\n实现内容:\n- MFA 回跳(a328b99):完成回执带受控续办地址时成功标记停留后直接整页跳回 /oidc/select,不刷新控制台身份,只有一次导航;refresh 增加 quiet 选项避免流程中页面重挂\n- 认证页文案(c7966f8):品牌字样改为“IAM 统一身份认证”,MFA 副标题由“进入控制台”改为“完成登录”\n- 管理工作台门禁(443dc01):平台角色或任一企业管理角色(逐页读完本人企业)才渲染管理工作台;没有管理身份只显示“IAM 账号中心”个人账号页,读取失败可重试且不放行\n- 交接说明(28fda4f):docs/handoff/login-return-and-console-gate.md,含给后端的部署与改进建议\n\n验证:\n- 合并前确认 main 为分支起点 0c74265,无分叉;主目录未提交改动仅在 scripts/experience/,与本次合并没有共同文件\n- 分支上 iam-admin-web npm run check 通过(格式、lint、类型检查、Vitest 36 个文件 314 项、构建)\n- 未运行:后端测试;真实账号 MFA、业务应用全链路与部署环境浏览器验收\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-16T19:44:05-07:00"}],"HeadCommit":{"Sha1":"06daf4a651e1a490ace181ac708099def39e8de0","Message":"fix: 合并邀请页密码要求说明与激活错误反馈修复\n\n用户发现从邀请邮件进入接受邀请页时,设置过短的新密码只会看到\"请求未完成,安全令牌失效时刷新页面重试\"的通用提示。本次合入 feat/console-layout 上的前端修复,让用户能按提示修改后重新提交。\n\n实现内容:\n- 邀请页修复(765bf82):api.ts 导出 apiErrorFromResponse 供 /activate 失败时复用错误体解析;激活仍以 urlencoded 表单提交、只按状态码判定 HTML 成功响应;密码字段说明新账号须为 12—128 个字符,不对已有账号原密码做最短长度拦截;INVALID_PASSWORD 显示在密码字段下方并聚焦,INVALID_ACTIVATION、INVITATION_NOT_APPLICABLE、CONFLICT、401/403、429、网络异常与 5xx 分别给出固定安全文案\n\n验证:\n- 合并前确认分支基于 main 63544c6,main 在其后没有新提交;主目录未提交改动仅在 scripts/experience/、docs/handoff/demo-video-env-01.md 与 iam-demo-video/,与本次合并没有共同文件\n- 分支上 iam-admin-web 的 format:check、typecheck、lint 通过\n- 未运行:Vitest 单元测试、构建、后端测试、浏览器检查与真实邀请激活\n","AuthorEmail":"gamebyteyu@gmail.com","AuthorName":"starry","CommitterEmail":"gamebyteyu@gmail.com","CommitterName":"starry","Timestamp":"2026-10-18T20:58:53-07:00"},"CompareURL":"pengzhiyu/IAM/compare/3ddc9da392e7b9a38e98ddb4e6b71fa6f8a0b48f...06daf4a651e1a490ace181ac708099def39e8de0","Len":5}... |