关于 clerk-validator
面向在 Next.js 16 项目中配置或审查 Clerk 认证的开发者。Python 脚本检查包版本、配置和认证写法,并支持严格的 CI 验证模式。
主要功能
- 01检查 Clerk 包版本
- 02检查 Next.js 16 proxy 与 middleware
- 03验证 ClerkProvider 配置
- 04检查认证导入写法
- 05严格 CI 验证
适用场景
- 01审查现有 Clerk 配置
- 02检查生成的认证代码
- 03实施前验证配置
- 04在 CI/CD 中运行认证检查
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ shipshitdev/ skills --skill clerk-validator安装后在 Claude Code 中输入/clerk-validator确认已加载。
附带文件plugin.jsonreferences/full-guide.md
详细介绍
Clerk 验证器
验证 Clerk 身份验证配置,并在 Next.js 16 中强制使用现代 Clerk 模式。
何时启用
- 设置 Clerk 身份验证
- 开始任何身份验证实现工作之前
- 审核现有 Clerk 配置
- AI 生成 Clerk 代码后
- CI/CD 流水线验证
快速开始
python3 scripts/validate.py --root .
python3 scripts/validate.py --root . --strict
检查内容
1. 包版本
// GOOD: Latest Clerk
"@clerk/nextjs": "^6.0.0"
// BAD: Old version
"@clerk/nextjs": "^4.0.0"
2. Proxy 与 Middleware(Next.js 16)
正确 - Next.js 16:
// proxy.ts
import { clerkMiddleware } from "@clerk/nextjs/server";
export default clerkMiddleware();
错误 - 已弃用:
// middleware.ts (deprecated in Next.js 16)
import { authMiddleware } from "@clerk/nextjs"; // DEPRECATED
export default authMiddleware();
3. ClerkProvider 设置
正确: 在 app/layout.tsx 中使用 <ClerkProvider> 包裹整个应用。
错误: 将其放在 _app.tsx 中(Pages Router,已弃用),或忘记包裹整个组件树。
完整布局示例请参阅 references/full-guide.md(§ 使用 Clerk 组件的根布局)。
4. 身份验证导入模式
正确 - 服务端:
import { auth } from "@clerk/nextjs/server";
export default async function Page() {
const { userId } = await auth();
// ...
}
错误 - 旧模式:
// Don't use
import { getAuth } from "@clerk/nextjs/server"; // OLD
import { currentUser } from "@clerk/nextjs"; // Check version
5. 环境变量
必需:
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=pk_...
CLERK_SECRET_KEY=sk_...
可选,但建议设置:
NEXT_PUBLIC_CLERK_SIGN_IN_URL=/sign-in
NEXT_PUBLIC_CLERK_SIGN_UP_URL=/sign-up
NEXT_PUBLIC_CLERK_AFTER_SIGN_IN_URL=/dashboard
NEXT_PUBLIC_CLERK_AFTER_SIGN_UP_URL=/onboarding
已弃用的模式
| 已弃用 | 替代方案 |
|---|---|
authMiddleware() | clerkMiddleware() |
middleware.ts | proxy.ts(Next.js 16) |
getAuth() | auth() |
@clerk/nextjs < v5 | @clerk/nextjs@latest |
_app.tsx 提供程序 | app/layout.tsx 提供程序 |
withClerkMiddleware | clerkMiddleware() |
验证输出
=== Clerk Validation Report ===
Package Version: @clerk/[email protected] ✓
Configuration: ✓ ClerkProvider ✓ proxy.ts ✗ middleware.ts found (deprecated)
Auth Patterns: ✓ auth() ✗ authMiddleware() in 1 file (deprecated)
Summary: 2 issues found
现代 Clerk 模式
受保护的路由(服务端组件)
调用 await auth();如果缺少 userId,则重定向到 /sign-in,并且仅在完成检查后渲染。
完整页面请参阅 references/full-guide.md(§ 受保护的路由示例)。
受保护的路由(客户端组件)
将组件标记为 "use client",从 useAuth() 读取 { isLoaded, userId },并在两者都已解析前渲染加载或重定向状态。
完整组件请参阅 references/full-guide.md(§ 使用 Auth Hook)。
API 路由
在路由处理程序中调用 await auth();如果缺少 userId,则在执行任何工作前返回 401。
完整处理程序请参阅 references/full-guide.md(§ 受保护的 API 路由)。
NestJS Guard
提取 bearer token,使用 clerkClient.verifyToken 验证,并将 userId 附加到请求;任何失败时都返回 false 或抛出异常。
完整 Guard 请参阅 references/full-guide.md(§ 身份验证 Guard)。
Webhook 配置
使用 svix 包,根据 CLERK_WEBHOOK_SECRET 验证 svix-id / svix-timestamp / svix-signature 标头后,再信任负载;绝不要处理未经验证的 webhook 请求体。
完整路由处理程序请参阅 references/full-guide.md(§ Webhooks(Next.js App Router));NestJS 控制器对应实现请参阅(§ Webhook 处理程序)。
CI/CD 集成
# .github/workflows/validate.yml
- name: Validate Clerk Config
run: |
python3 scripts/validate.py \
--root . \
--strict \
--ci
集成
nextjs-validator- 验证 Next.js 16(proxy.ts)biome-validator- 验证 lint 配置git-safety- 确保没有提交机密信息