Skip to content

我的会话 (多设备管理)

路由: /me/sessions · scope: self · 状态: ✅ F01 §12 已上线

列出当前账号在 admin web 的全部活跃登录, 一键踢掉其他设备 (例: 丢了手机 / 怀疑别人偷登 / 在网吧登过忘退)。撤销立即生效 (Redis blocklist + pg_notify 跨进程同步, 不依赖 token 自然过期)。

用途

  • 看自己当前在哪几台设备 / 浏览器登着 知办AI admin
  • 远程踢掉非当前设备
  • 检测异常登录 (来自不熟悉 IP / User-Agent)
  • impersonate (代入模式) 检查: 有红色「代入模式」标签的会话是别人代你在登

前提

  • 已用任意身份登录 admin web (本菜单对所有 sys-users / members 开放, 无需角色)

进入路径

右上头像下拉 → 「我的会话」, 或地址栏直接 /me/sessions

页面结构 (对齐 apps/agent-bus-admin/src/pages/MySessions.tsx)

页面标题: 「我的会话 (多设备管理)」+ 副标题说明撤销机制。

主列表 6 列:

说明
设备 / User Agent浏览器 UA 字符串 (hover 看完整); 如果是代入模式, 下方红色标 代入模式 (<actingAs>)
IP登录来源 IP, 等宽字体, 没记到则「—」
登录时间session issuedAt 时间, 本地时区
最近使用session lastUsedAt 时间, 本地时区
状态蓝色「当前会话」(本页所在设备) 或绿色「活跃」(其它设备) chip
操作非当前会话有红色 trash icon「踢掉这台设备」; 当前会话无操作

截图位: ![my-sessions 列表](#)

空列表: 居中 Monitor icon + 「没有活跃 session」(实际上至少有当前会话, 这个分支是兜底)。 加载中: 「加载中…」灰字。

操作步骤

踢掉某台设备

  1. 列表行 (非「当前会话」) → 操作列 trash icon
  2. confirm() 原生对话框: 「确认踢掉这台设备? 该设备上 admin 会立即被拒, 需要重新登录。」
  3. 「确定」→ 后端调 DELETE /api/admin/v1/me/sessions/{uuid} → 立即:
    • 该 session uuid 写 Redis blocklist
    • pg_notify 跨 bus/admin-api 进程同步
    • 列表刷新, 该行消失

被踢的设备下一次请求 admin-api → 401, 跳回 /login

看代入模式 (是否被人代入)

如果某行下方有红色「代入模式 (X)」标签, 表示有人正以 X 身份 impersonate 你你正在 impersonate X

  • impersonate 由 [F01 §10] 平台管理员发起, 走真实临时 role_assignment, 会留审计
  • 看到不该看到的代入要立刻「踢掉」+ 联系平台 admin

字段约束

  • 当前会话 (s.isCurrent = true) 不能踢自己 (UI 隐藏 trash 按钮; 后端拒绝)
  • 撤销立即生效, 但页面上需要点列表才能看到新状态 (有 useEffect 自动 refresh)

相关 API

  • GET /api/admin/v1/me/sessions — 列表
  • DELETE /api/admin/v1/me/sessions/{uuid} — 撤销
  • 撤销后端走 Redis blocklist + pg_notify 跨进程同步, 见 [F01 §12]

相关菜单

  • 改个人资料: 个人资料
  • 平台 admin 跨账户会话查询:后续由审计 handbook 补充。

常见问题

Q: 踢自己当前设备能让别处「我」继续在? A: 当前会话没踢按钮 (UI 隐藏 + 后端拒)。只能踢「其它设备」。

Q: 列表为什么没刷新? A: 撤销成功后会自动 setTick→ useEffect 重新拉; 网络问题或 hook 没触发, 手动刷新整个页面。

Q: 「代入模式」标签什么时候出现? A: 当某条 session 是 impersonate 模式发起的 — session 的 actingAs 字段非空时 (例 actingAs="acme-corp:bob@acme.com")。impersonate 操作有审计 audit_events.kind = 'impersonate.start' / .end

Q: 看到陌生 IP 来自境外? A: 立刻踢掉 + 改密 ([forgot password] 流程) + 通知平台 admin 审计。

© 知办AI Team — 开发者公开文档. 平台运维 / 内部架构文档见内部 wiki.