关于 convex-auth
convex-auth 是用于在应用中接入 @convex-dev/auth 的开发技能,面向构建 Convex 应用的开发者。它涵盖服务端配置、客户端登录界面及密钥生成,并特别处理无交互环境中的配置流程。
主要功能
- 01配置 @convex-dev/auth 提供方
- 02默认使用 Passkey 登录
- 03无交互生成 JWT 密钥
- 04设置认证环境变量
- 05接入客户端登录与路由保护
- 06验证登录流程
适用场景
- 01为 Convex 应用添加 Passkey 登录
- 02在 CI 环境配置认证密钥
- 03接入 OAuth 或密码登录
- 04检查登录流程是否成功
MCP 相关
说明中建议优先使用 Convex MCP 的 envSet 工具设置部署环境变量。
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ get-convex/ agent-skills --skill convex-auth安装后在 Claude Code 中输入/convex-auth确认已加载。
详细介绍
为应用添加登录功能
为当前应用安装并接入 @convex-dev/auth:配置提供方(默认使用通行密钥,也可按需使用 OAuth/密码)、服务端配置、客户端钩子和登录界面,并确保配置正确,尤其是容易出错的 auth.config.ts。
工作流
- 安装固定版本的 @convex-dev/auth,并将其添加到 convex.config.ts。使用 pnpm 时,还要运行
pnpm add jose(否则它不会被提升到顶层);第 3 步需要用到它。 - 在 convex/auth.ts 中添加提供方(默认使用 Passkey;如有要求,可使用 Password 或 Google 等 OAuth)。
- 以无头方式生成身份验证密钥。不要运行交互式
npx @convex-dev/auth向导:它需要登录和 TTY,在非交互、匿名或 CI 环境中会卡住(这是最常见的身份验证耗时问题)。使用jose确定性地生成 JWT_PRIVATE_KEY + JWKS: node -e 'import("jose").then(async({generateKeyPair,exportPKCS8,exportJWK})=>{const k=await generateKeyPair("RS256",{extractable:true});const priv=await exportPKCS8(k.privateKey);const pub=await exportJWK(k.publicKey);process.stdout.write(JSON.stringify({JWT_PRIVATE_KEY:priv.trimEnd().replace(/\n/g," "),JWKS:JSON.stringify({keys:[{use:"sig",...pub}]})}))})' > .auth-keys.json 然后在部署环境中设置 JWT_PRIVATE_KEY 和 JWKS(从 .auth-keys.json 获取),以及 SITE_URL。优先使用 Convex MCPenvSet工具,每个变量单独调用一次,以避免对多行密钥进行 shell 转义。CLI 备用方式:使用 NAME=VALUE 格式(npx convex env set "JWT_PRIVATE_KEY=$JWT"),切勿使用env set JWT_PRIVATE_KEY "$JWT"(值以-----BEGIN开头,CLI 会将开头的-解析为未知标志)。SITE_URL 是开发 URL(例如 http://localhost:3000)。之后删除 .auth-keys.json。 - 编写 convex/auth.config.ts(配置错误会导致应用始终处于已退出登录状态,且不会报错)。
- 接入客户端:添加 ConvexAuthProvider、登录组件和路由守卫。如果导入 shadcn/ui 基础组件(button、input、textarea、label 等),先使用
npx shadcn@latest add <name>添加;缺少 @/components/ui/* 会导致构建失败。 - 在宣布完成前,验证登录流程能够成功往返。
规则
- 使用
jose生成 JWT_PRIVATE_KEY/JWKS(可导出的 RS256;将 PKCS8 换行符替换为空格;JWKS = {keys:[{use:"sig", ...publicJwk}]})。不要运行交互式npx @convex-dev/auth向导:它在无头或匿名环境中会卡住。通过 MCPenvSet工具或 NAME=VALUE CLI 格式设置变量。 - 始终编写 auth.config.ts:缺少或配置错误会导致应用始终处于已退出登录状态,且不会报错。
- 默认使用 Passkey;只有在明确要求时才切换为密码/OAuth。
- 提前安装导入的所有 shadcn/ui 基础组件(
npx shadcn@latest add ...);缺少 @/components/ui/* 会导致构建失败。 - 完成前验证真实登录可用。
评论
支持 Markdown