如何在Clerk中限制已认证用户访问登录/注册路由并跳转首页?
限制已登录用户访问注册/登录页并重定向的解决方案
要实现已登录用户访问/register或/login时重定向到首页,你可以在对应的条件判断块中返回重定向响应。具体代码如下:
import { clerkMiddleware, createRouteMatcher } from '@clerk/nextjs/server' const isProfileRoute = createRouteMatcher(['/profile(.*)']) const isRegisterRoute = createRouteMatcher(['/register(.*)', '/login(.*)']) export default clerkMiddleware((auth, req, res) => { if (isProfileRoute(req)) { auth().protect({ unauthenticatedUrl: 'http://localhost:3000/login' }) } if (auth().userId && isRegisterRoute(req)) { // 重定向到首页 return Response.redirect(new URL('/', req.url)) } }, {debug: true}) export const config = { matcher: ['/((?!.*\\..*|_next).*)', '/', '/(api|trpc)(.*)'], }
关键说明:
Response.redirect是Next.js Middleware的标准重定向方式,通过new URL('/', req.url)动态生成首页地址,能适配开发、生产等不同环境的协议和域名,避免硬编码的局限性。- 返回该响应会立即中断中间件后续逻辑,直接将用户导航到首页,完成对已登录用户访问登录/注册页的限制。
内容的提问来源于stack exchange,提问作者Володимир Андрушевський
相关产品推荐
相关产品推荐

