You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Clerk新版本配置NextJS路由权限遇阻求助

新版Clerk NextJS路由权限配置:保护所有路由并公开/api路由

要实现保护所有页面路由,同时开放所有/api路径的需求,新版Clerk的配置需要调整路由匹配逻辑,以下是正确的实现代码:

// app/middleware.js
import { clerkMiddleware, createRouteMatcher } from "@clerk/nextjs/server";

// 定义所有公开路由:登录注册页 + 所有/api子路径
const isPublicRoute = createRouteMatcher(["/sign-in", "/sign-up", "/api/:path*"]);

export default clerkMiddleware((auth, request) => {
  // 仅对非公开路由执行身份校验
  if (!isPublicRoute(request)) {
    auth().protect();
  }
});

export const config = {
  matcher: ["/((?!.*\\..*|_next).*)", "/", "/(api|trpc)(.*)"],
};

关键配置说明:

  • 用createRouteMatcher把/api/:path*加入公开路由列表,通配符:path*会匹配所有/api下的子路径
  • 逻辑上反向判断:如果请求不在公开路由范围内,就调用auth().protect()强制校验身份,以此实现「默认保护所有路由,仅公开指定路径」的效果
  • 保留原有的matcher配置,确保中间件能覆盖所有需要处理的路由(排除静态资源和NextJS内部路径)

新旧版本差异:

旧版authMiddleware默认保护所有路由,只需通过publicRoutes声明例外;新版clerkMiddleware默认不保护任何路由,需要主动通过代码逻辑定义哪些路由需要校验身份,核心思路是先划定公开范围,再对其余路由强制保护。

内容的提问来源于stack exchange,提问作者Jean Mako

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 20:02:40