ApiKeySettings 组件
概述
ApiKeySettings 是 API 密钥管理组件,允许用户生成、查看、重新生成和撤销 API 密钥,以及配置 MCP Prompt 的默认公开设置。
文件路径
src/components/settings/api-key-settings.tsx
功能特性
- 密钥生成: 一键生成新 API 密钥
- 密钥显示: 支持显示/隐藏密钥
- 密钥复制: 一键复制到剪贴板
- 重新生成: 生成新密钥使旧密钥失效
- 密钥撤销: 完全删除 API 密钥
- 公开设置: 配置 MCP Prompt 默认是否公开
- 确认对话框: 重要操作需要确认
接口定义
interface ApiKeySettingsProps {
initialApiKey: string | null; // 初始 API 密钥
initialPublicByDefault: boolean; // 初始公开设置
}
// 组件状态
interface ApiKeyState {
apiKey: string | null; // 当前 API 密钥
showKey: boolean; // 是否显示明文
isLoading: boolean; // 加载状态
publicByDefault: boolean; // 默认公开设置
}
使用示例
import { ApiKeySettings } from "@/components/settings/api-key-settings";
export default async function SettingsPage() {
const user = await getUser();
return (
<ApiKeySettings
initialApiKey={user.apiKey}
initialPublicByDefault={user.mcpPromptsPublicByDefault}
/>
);
}
API 端点
生成/重新生成密钥
POST /api/user/api-key
撤销密钥
DELETE /api/user/api-key
更新公开设置
PATCH /api/user/api-key
Body: { mcpPromptsPublicByDefault: boolean }
密钥显示
密钥显示为掩码格式:
前10位 + 32个• + 后8位
示例:
pak_1234abcd••••••••••••••••••••••••••xyz78901
UI 组件
密钥存在时
- 密钥显示区域(可切换显示/隐藏)
- 复制按钮
- 默认公开开关
- 重新生成按钮(带确认对话框)
- 撤销按钮(带确认对话框,红色警告)
密钥不存在时
- 提示文本
- 生成密钥按钮
确认对话框
重新生成
标题:重新生成 API 密钥?
描述:这将使您现有的 API 密钥失效。使用旧密钥的应用将停止工作。
操作:取消 / 重新生成
撤销
标题:撤销 API 密钥?
描述:此操作无法撤销。您的 API 密钥将永久删除。
操作:取消 / 撤销(红色按钮)
依赖
next-intl- 国际化lucide-react- 图标sonner- toast 通知@/components/ui/*- UI 组件
- Button - Switch - Label - Card - AlertDialog
注意事项
- API 密钥只显示一次,刷新后无法再次查看明文
- 重新生成会立即使旧密钥失效
- 撤销操作不可恢复
- 公开设置影响通过 MCP 创建的新 Prompt
- 所有操作都有加载状态防止重复提交
- 建议在安全环境下复制和保存密钥
安全最佳实践
- 不要在客户端代码中硬编码 API 密钥
- 定期轮换(重新生成)API 密钥
- 如果密钥泄露,立即撤销并重新生成
- 仅在必要时将密钥设置为公开