Skip to content

[portal] 匿名提交后缺少 onSuccess 跳转 + 短期 token 协议(GAP-1 of #1294) #1331

@xuyushun441-sys

Description

@xuyushun441-sys

现象

匿名访客通过 /portal/<id>/submit 提交工单后,没有"提交成功 → 跳到工单状态页"的协议字段。当前只有 bindIdentityFromField 把邮箱绑定到 magic-link,但 magic-link 是异步的(用户要先去查邮件)。

复现(按 #1294 spec 走完整流程)

  1. 匿名访客填表 → action helpdesk_ticket.create 成功 → ticket 🔗 Broken links detected in documentation #123 创建
  2. 用户期望:立刻在浏览器看到「工单 🔗 Broken links detected in documentation #123 已创建,状态:处理中」
  3. 实际:spec 没说跳哪。落到空白页/原表单?

Workaround

模板作者在 action 的 success handler 里硬编码 redirect — 但这违反「零业务代码」原则。

分阶段建议

M2(生产可用前必须补):

  • PortalAnonymousRouteSchema 新增 onSuccess:
    onSuccess?: {
      showView?: string;                       // viewRef,detail 或 list
      showRecordCreated?: boolean;             // 自动跳到新创建记录的 detail
      ephemeralToken?: { ttl: string };        // 颁发短期 token 让匿名用户在 ttl 内回访
      message?: I18nLabel;                     // 「已提交,请查收邮件」
    }
  • ephemeralToken 写入 cookie/URL,data API 校验时把它视为 system.anonymous 的临时 elevated 身份

验收

  • helpdesk 模板里声明 onSuccess.showRecordCreated: true 后,匿名提单 → 自动跳 /portal/helpdesk/ticket/<id>?t=<ephemeral_token> → 看到工单详情,刷新 24h 内仍有效

关联

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions