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
相关产品推荐
相关产品推荐

