本技能用于在 Clerk 中实现会话管理与中间件路由保护,适用于管理用户会话、配置路由保护或实现令牌刷新与自定义 JWT 模板的场景。主要内容包括 clerkMiddleware() 配置、auth() 使用模式、自定义会话声明、面向外部服务的 JWT 模板、组织范围会话以及 session token v2。
前置条件:已安装 @clerk/nextjs 并用 ClerkProvider 包裹应用;使用 Next.js 14+ 的 App Router(其他技术栈可自行适配相应模式);环境变量中存在可用的 publishable 与 secret Clerk 密钥。
使用步骤:确认 ClerkProvider 与环境密钥已生效;配置 clerkMiddleware() 的 matcher 与 publicRoutes 以设定开放路由;在受保护页面和 API 路由上使用 auth() 或 currentUser(),未认证时按失败关闭处理;如需自定义声明或供外部消费 JWT,谨慎配置会话令牌模板(注意体积限制);组织级应用应将授权绑定到组织 id 与角色声明,而非仅用户 id。验证点:未登录用户无法访问受保护路由,登录用户可访问,组织角色门控生效。
输出包括:强制执行所需保护规则的会话与中间件配置、自定义时记录的 JWT 或会话声明变更、受保护与公开路由的验证步骤。示例场景:保护除 /、/pricing 及 Clerk 登录路由外的所有路由;为功能开关在会话 JWT 中加入 plan_tier 自定义声明。
错误处理要点:路由意外变为公开时应让验证门失败并收紧 matcher;会话声明缺失或过期时,将依赖该功能相关的请求视为未授权并走支持的刷新路径;JWT 超出消费方限制时移除非必要声明,改由授权后端获取服务端属性;组织上下文缺失时拒绝组织范围操作并要求显式选择或角色校验。更深入的模式、JWT 模板与边界情况可参见 session-middleware-deep-dive.md 及相关 Clerk 中间件、会话令牌与组织角色文档。