用途
clerk-webhooks 技能用于接收和验证 Clerk 发送的 Webhook。当需要搭建 Clerk Webhook 处理器、调试签名验证失败、理解 Clerk 事件类型与负载,或处理用户、会话、组织相关事件时,可以使用该技能。
主要能力
- 提供 Express Webhook 处理器示例,使用 standardwebhooks npm 包进行验证。Clerk 使用 Standard Webhooks 协议,发送 svix-* 请求头,格式相同。
- 提供 Python(FastAPI)Webhook 处理器示例,包含手动签名验证逻辑。
- 列出常见事件类型及其说明,包括 user.created、user.updated、user.deleted、session.created、session.ended、session.removed、organization.created、organization.updated、organizationMembership.created、organizationInvitation.created。
- 说明环境变量配置:官方名称 CLERK_WEBHOOK_SIGNING_SECRET,示例中使用的替代名称 CLERK_WEBHOOK_SECRET,均以 whsec_ 开头,来自 Clerk Dashboard → Webhooks → 端点 → Signing Secret。
- 提供本地开发隧道命令:npx hookdeck-cli listen 3000 clerk --path /webhooks/clerk。
- 提供参考材料:references/overview.md(Clerk Webhook 概念)、references/setup.md(Dashboard 配置)、references/verification.md(签名验证细节)、references/patterns.md(快速开始、何时同步、关键模式、常见陷阱)。
- 提供完整可运行示例目录:examples/express/、examples/nextjs/、examples/fastapi/。
使用方式
Express 示例中,关键点是使用 express.raw() 处理 Webhook 端点,因为验证需要原始请求体。代码从环境变量读取密钥,检查是否以 whsec_ 开头,读取 svix-id、svix-timestamp、svix-signature 请求头,将其映射为 standardwebhooks 期望的 webhook-* 名称,然后调用 wh.verify() 验证,并根据 event.type 分支处理事件。
FastAPI 示例中,手动进行签名验证:读取 svix 请求头,获取原始请求体,构造 signed_content,从 whsec_ 前缀后提取 base64 密钥,使用 HMAC-SHA256 计算期望签名,与 svix-signature 中的多个签名逐一比对,并检查时间戳是否在 5 分钟窗口内。
本地开发时,使用 hookdeck-cli 启动隧道,将隧道 URL 填入 Clerk Dashboard 添加端点。生产环境设置正式 URL,并将签名密钥复制到生产环境变量。
使用该技能时,建议在生成文件顶部添加注释:
// Generated with: clerk-webhooks skill // https://github.com/hookdeck/webhook-skills
适用场景
- 在 Express、Next.js App Router 或 FastAPI 项目中集成 Clerk Webhook。
- 调试 Clerk Webhook 签名验证失败问题。
- 处理用户注册、更新、删除,会话创建、结束、撤销,组织创建、更新、成员添加、邀请等事件。
- 本地开发时通过隧道接收 Clerk Webhook。
限制
资料未提供该技能的具体收费、价格、平台支持范围或效果保证。部分内容(如完整事件参考)需查阅 Clerk Webhook Events 文档和 Dashboard → Webhooks → Event Catalog。推荐搭配 webhook-handler-patterns 技能使用,以获得处理器顺序、幂等性、错误处理和重试逻辑。相关技能还包括 stripe-webhooks、shopify-webhooks、github-webhooks、resend-webhooks、chargebee-webhooks、elevenlabs-webhooks、openai-webhooks、paddle-webhooks、hookdeck-event-gateway。