Skip to main content

Delete Account

用户账户删除功能,用于处理用户的账户注销请求。

功能入口

在 Admin 侧边栏 → User Management → Delete Account

操作流程

1

输入 User ID

在表单中输入需要删除的用户 ID
2

确认删除

输入 “DELETE” 确认操作
3

执行删除

点击 Delete Account 按钮执行删除
4

结果通知

  • 删除成功:显示成功消息
  • 发送 Lark 通知
  • 记录到删除日志

删除流程

删除内容

调用 Kira Backend API 删除以下用户数据:
数据说明
auth.usersSupabase 认证用户
user_profiles用户配置和订阅信息
threads用户的对话记录
messages对话消息
thread_version图片版本快照
Storage用户上传的图片文件

删除日志

每次删除操作会记录到 deletion-logs 集合:
字段说明
userId被删除的用户 ID
email用户邮箱
nickname用户昵称
plan订阅计划 (free/pro/max)
credit剩余积分
deletedAt删除时间
deletedBy执行删除的管理员

Lark 通知

删除成功后自动发送 Lark 通知:
🗑️ [Kira OP] Account Deleted

User ID: xxx
Email: [email protected]
Nickname: John
Plan: pro
Credit: 100
Time: 2024-01-15T10:30:00Z
Status: Success

历史记录

页面下方显示最近 50 条删除记录,包含:
  • Email
  • Nickname
  • Plan
  • Credit
  • Deleted At

技术实现

视图配置

// payload.config.ts
admin: {
  components: {
    views: {
      deleteAccount: {
        Component: '/components/views/DeleteAccount',
        path: '/delete-account',
        exact: true,
      },
    },
    afterNavLinks: ['/components/NavLinks'],
  },
}

导航链接

// components/NavLinks.tsx
<NavGroup label="User Management">
  <Link className="nav__link" href="/admin/delete-account">
    <span className="nav__link-label">Delete Account</span>
  </Link>
</NavGroup>

API 调用

// 删除用户
const response = await fetch(
  `${API_URL}/user?password=${DELETE_PASSWORD}&userId=${userId}`,
  { method: 'DELETE' }
)

// 保存日志
await fetch('/api/deletion-logs', {
  method: 'POST',
  body: JSON.stringify({
    userId,
    email,
    nickname,
    plan,
    credit,
    deletedAt: new Date().toISOString(),
  })
})

// Lark 通知
await fetch('/api/lark-notify', {
  method: 'POST',
  body: JSON.stringify({ message })
})

Collection 定义

// collections/DeletionLogs.ts
export const DeletionLogs: CollectionConfig = {
  slug: 'deletion-logs',
  admin: {
    hidden: true, // 从导航隐藏,在自定义视图中显示
  },
  access: {
    read: () => true,
    create: () => true,
    update: () => false,  // 不允许修改
    delete: () => false,  // 不允许删除
  },
  fields: [
    { name: 'userId', type: 'text', required: true },
    { name: 'email', type: 'text' },
    { name: 'nickname', type: 'text' },
    { name: 'plan', type: 'text' },
    { name: 'credit', type: 'number' },
    { name: 'deletedAt', type: 'date', required: true },
    { name: 'deletedBy', type: 'relationship', relationTo: 'users' },
  ],
}

安全考虑

删除操作不可逆,请谨慎操作。
  • 需要输入 “DELETE” 确认才能执行
  • 所有删除操作都有日志记录
  • 日志不可修改和删除
  • 通过 Lark 通知实时告警